nyoj 完全背包
来源:互联网 发布:1688淘货源传淘宝 编辑:程序博客网 时间:2024/06/02 12:39
完全背包
直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积是c,价值是w。求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大。本题要求是背包恰好装满背包时,求出最大价值总和是多少。如果不能恰好装满背包,输出NO
Input
第一行: N 表示有多少组测试数据(N<7)。
接下来每组测试数据的第一行有两个整数M,V。 M表示物品种类的数目,V表示背包的总容量。(0<M<=2000,0<V<=50000)
接下来的M行每行有两个整数c,w分别表示每种物品的重量和价值(0<c<100000,0<w<100000)
接下来每组测试数据的第一行有两个整数M,V。 M表示物品种类的数目,V表示背包的总容量。(0<M<=2000,0<V<=50000)
接下来的M行每行有两个整数c,w分别表示每种物品的重量和价值(0<c<100000,0<w<100000)
Output
对应每组测试数据输出结果(如果能恰好装满背包,输出装满背包时背包内物品的最大价值总和。 如果不能恰好装满背包,输出NO)
Sample Input
21 52 22 52 25 1
Sample Output
NO1
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int dp[50005],w[2005],v[2005];int main(){ int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); int n,m,i,j; scanf("%d%d",&n,&m); for(i=1; i<=n; i++) scanf("%d%d",&w[i],&v[i]); for(i=0; i<=m; i++) dp[i]=-100000000;//用来判断背包是否装满 dp[0]=0; int k; for(i=1; i<=n; i++) for(j=w[i]; j<=m; j++) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); if(dp[m]<0) printf("NO\n"); else printf("%d\n",dp[m]); } return 0;}
0 0
- NYOJ 311 完全背包
- nyoj-311-完全背包
- 完全背包(nyoj 311)
- NYOJ 311 完全背包
- NYOJ 311【完全背包】
- NYOJ 311 完全背包
- 完全背包 nyoj 311
- NYOJ 311 完全背包
- NYOJ 311 完全背包
- nyoj 311 完全背包
- NYOJ 311 完全背包
- NYOJ 311 完全背包
- NYOJ 311 完全背包
- NYOJ 311 完全背包
- NYOJ 311 完全背包
- nyoj 311 完全背包
- nyoj 311 完全背包
- nyoj 311 完全背包
- HTTP协议详解
- static
- 第13周项目1-Prim算法的验证
- 快速入门HTML-----入门HTML必看的文章
- springMVC各个包下的作用
- nyoj 完全背包
- easyui 1.4 以上版本datagrid editors 计算两列的值
- 闲聊阿里加固(一)
- c#栈队列的实现和应用
- ubuntu mysql 安装和外网访问配置
- SQL Server中的Merge关键字
- thinkphp的select和find的区别
- 第十三周项目5---拓扑排序算法验证
- Java 遍历Map时 删除元素