手机搭建免费网站wordpress 模拟登陆
news/
2025/10/8 19:17:43/
文章来源:
手机搭建免费网站,wordpress 模拟登陆,百度云免费做网站,东莞做网站公司在哪01背包
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i件物品的体积是 vi#xff0c;价值是 wi。 求解将哪些物品装入背包#xff0c;可使这些物品的总体积不超过背包容量#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数#xff0c;N…01背包
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i件物品的体积是 vi价值是 wi。 求解将哪些物品装入背包可使这些物品的总体积不超过背包容量且总价值最大。 输出最大价值。 输入格式 第一行两个整数NV 用空格隔开分别表示物品数量和背包容积。 接下来有 N 行每行两个整数 vi,wi用空格隔开分别表示第 i 件物品的体积和价值。
输出格式 输出一个整数表示最大价值。
数据范围 0N,V≤1000
0vi,wi≤1000 4 5 1 2 2 4 3 4 4 5
输出 8
代码
#includeiostream
using namespace std;
int main(){
int N,V;
int v[1010],w[1010];
for(int i 0;iN;i){cinv[i]w[i];
}
for(int i 1;iN;i){for(int j 0;jV;j){
if(jv[i])f[i][j]f[i-1][j];
else f[i][j]max(f[i-1][j],f[i-1][j-v[i]w[i]);
}
}
coutf[N][V];
return 0;
}分析
f[i][j] 的值表示前i件且用时为j的选择的最大价值。
if(jf[i][j])
f[i][j]f[i-1][j]表示当当前容量拿不了第i件所以当前可拿到的最大价值是和前i-1件相等的。
elsef[i][j] max(f[i-1][j],f[i-1][j-v[i]]w[i])表示当前容量可以那第i件时最大价值在拿第i件或或不拿第i件 之中。
为什么呢怎么强行理解呢 因为从f[1][0]开始就是不断的取最大会使f[i][j]更大的值f[i][j]之前的都全部考虑好了只要考虑f[i][j]怎么拿到最大要么不拿第i件要么拿第i件和拿前i-1件且容量为j-w[i]可拿的最大价值。 而 f[i-1][j-v[i]] 在之前已经算好了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931857.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!