nyist 860 又见01背包
来源:互联网 发布:cms监控软件安卓手机版 编辑:程序博客网 时间:2024/06/05 04:46
又见01背包
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
- 有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W的物品,求所有挑选方案中物品价值总和的最大值。1 <= n <=1001 <= wi <= 10^71 <= vi <= 1001 <= W <= 10^9
- 输入
- 多组测试数据。
每组测试数据第一行输入,n 和 W ,接下来有n行,每行输入两个数,代表第i个物品的wi 和 vi。 - 输出
- 满足题意的最大价值,每组测试数据占一行。
- 样例输入
4 52 31 23 42 2
- 样例输出
7
由于w为10^9无法开出太大的dp数组 因此将价值作为dp的条件,与重量互换
#include<stdio.h>#include<iostream>#include<string.h>using namespace std;#define INF 0X3F3F3F3F;#define min(b,c) (b)>(c)? c:b;int dp[100000];int main(){ int n,w,j,i,s; int wi[1000],vi[1000]; while(scanf("%d%d",&n,&w)!=EOF) { s=0; for(i=0; i<n; i++) { scanf("%d%d",&wi[i],&vi[i]); s+=vi[i]; } for(i=1; i<=s; i++) dp[i]=INF; dp[0]=0; for(i=0; i<n; i++) { for(j=s; j>=vi[i]; j--) { dp[j]=min(dp[j],dp[j-vi[i]]+wi[i]); // cout<<dp[j]<<" "; } // cout<<endl; } for(i=s; i>=0; i--) { if(dp[i]<=w) { cout<<i<<endl; break; } } } return 0;}
0 0
- nyist 860 又见01背包
- nyist 苹果 01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- 又见01背包
- NYOJ 860 又见01背包
- 又见01背包(nyoj 860)
- NYOJ 860 又见01背包
- flume跨机房数据传输
- 比真机还快的Android模拟器——Genymotion
- hdu 1251 统计难题(字典树)
- 新入行程序员须知的8件事
- 机器学习模式识别数据挖掘数据集下载链接
- nyist 860 又见01背包
- msf终端命令
- 24位图转1位位图
- HDU1196_Lowest Bit【位运算】【水题】
- sdut 6-1 多态性与虚函数
- fedora 相关
- mapreduce中添加多个不同目录下的文件以及分发文件
- 静态链接库和动态连接库使用
- mybatis---关联表的增删改三种方式