3 条题解
-
9
代码如下
参考代码
#include <bits/stdc++.h> using namespace std;; int m,n,a[5000],f[5000]; vector<int> num[5000]; int main(){ cin >> n >> m; for(int i = 1;i <= n;i++){ cin >> a[i]; } for(int i = 1;i <= n;i++){ for(int j = m;j >= a[i];j--){ if(f[j-a[i]]+a[i] > f[j]){//需要注意本题01背包问题中,物品的价值等于物品的体积。 f[j] = f[j-a[i]]+a[i]; num[j] = num[j-a[i]]; num[j].push_back(i); } } } cout << m-f[m] << endl; for(int i = 0;i < num[m].size();i++){ cout << num[m][i] << ' '; } return 0; }
一个赞抱走
-
4
#include <bits/stdc++.h> using namespace std; int n,m,a[105],f[2005]; vector<int> ans[2005]; int main(){ cin >> n >> m; for(int i=1;i<=n;i++) cin >> a[i]; f[0]=0; for(int i=1;i<=n;i++) for(int j=m;j>=a[i];j--) if(f[j-a[i]]+a[i]>f[j]){ f[j]=f[j-a[i]]+a[i]; ans[j]=ans[j-a[i]]; ans[j].push_back(i); } cout << m-f[m] << endl; for(unsigned int i=0;i<ans[m].size();i++) cout << ans[m][i] << " "; return 0; }
- 1
信息
- ID
- 383
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 342
- 已通过
- 205
- 上传者