#include <bits/stdc++.h> using namespace std; int n, m; vector<long> suf;//可能会卡总重量的数据类型 vector<int> a; int ans = 100; void dfs(int pos, long cnt, int step) { if (cnt == m) { ans = min(ans, step); return; } if (cnt >= m || step >= ans || pos >= n || cnt + suf[pos] < m) { return; } dfs(pos + 1, cnt + a[pos], step); dfs(pos + 1, cnt + a[pos] / 2, step + 1); dfs(pos + 1, cnt, step); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; a.resize(n+5); suf.resize(n+5); m *= 2; for (int i = 0; i < n; i++) { cin >> a[i]; a[i] *= 2; } sort(a.begin(), a.end(), greater<int>()); for (int i = n - 1; i >= 0; i--) { suf[i] = suf[i + 1] + a[i]; } dfs(0,0,0); if (ans == 100) { cout << -1; } else { cout << ans; } return 0; }
0.0分
1 人评分
P1000 (C语言代码)浏览:903 |
第三届阿里中间件性能挑战赛-总决赛亚军比赛攻略浏览:1167 |
生日日数 (C语言代码)浏览:1566 |
1162答案错误,为什么浏览:699 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:552 |
很简单,,题解1041:C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:612 |
P1002 (C++代码)浏览:794 |
文件操作浏览:754 |
Manchester- A+B for Input-Output Practice (IV)浏览:1178 |
A+B for Input-Output Practice (I) (C语言代码)浏览:599 |