长沙网页制作设计无锡seo公司找哪家好
题目描述
思路
和背包有点像,但是他没有“显式”的说出价值,其实让求剩余空间最小,就是箱子体积最大,可以转换为求价值最大,即体积就是价值
代码
把上一篇题解的 洛谷 采药问题代码一改就ok
#include<bits/stdc++.h>
#define int long longusing namespace std;const int N = 1e6+10;int f[N];
int t[N],w[N];
//01背包signed main()
{int v, n;cin >> v>>n;for(int i = 1; i <= n; i++){cin>>t[i];w[i] = t[i];}for(int i = 1; i <= n; i++){for(int j = v; j >= t[i]; j--)//01背包是逆序
//这里省去判断的时机,这个物品的价值首先要小于总体积,还要大于这个物品的体积(进行转移){f[j] = max(f[j], f[j - t[i]]+w[i]);}}cout<<v-f[v]<<endl;//背包容量最大时return 0;
}
总结
关键是要能看出来是个背包问题