FZU 2214 Knapsack dp (转化背包)
2015-12-28 18:02
344 查看
就是一个背包裸题,由于物品的重量太大,开不了这么大的数组
所以转化一下,由于价值总和不大于5000,所以把价值看作重量,重量看作价值,那么就是同样的价值下,求一个最轻的重量
View Code
所以转化一下,由于价值总和不大于5000,所以把价值看作重量,重量看作价值,那么就是同样的价值下,求一个最轻的重量
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cstdlib> #include<cmath> #include<cstdlib> #include<vector> #include<queue> using namespace std; typedef long long LL; const int INF=0x3f3f3f3f; const int maxn=5005; LL dp[maxn]; int w[505],v[505]; int main() { int T; scanf("%d",&T); while(T--) { int n,b; scanf("%d%d",&n,&b); memset(dp,INF,sizeof(dp)); int sum=0; for(int i=1;i<=n;++i) scanf("%d%d",&w[i],&v[i]),sum+=v[i]; dp[0]=0; for(int i=1;i<=n;++i) { for(int j=sum;j>=v[i];--j) if(dp[j-v[i]]!=INF) dp[j]=min(dp[j-v[i]]+w[i],dp[j]); } int ans=0; for(int i=sum;i>0;--i) if(dp[i]!=INF&&dp[i]<=b)ans=max(ans,i); printf("%d\n",ans); } return 0; }
View Code
相关文章推荐
- 使用java rsa 签名和验签,生成私钥和公钥
- iOS--错误集锦--iOS7.1系统,xcodeVersion 7.2,运行app出现上下黑边
- swift属性
- nginx 安装SSL
- Android(Android5.0)下毛玻璃(磨砂)效果如何实现?
- Hama学习总结
- 我喜欢的资源
- iOS SEL的简单总结
- ListView和GridView调用notifyDataSetChanged界面不刷新
- 【转】gdb调试动态链接库
- 使用ProgressDialog时出现窗体泄露解决方案
- io操作
- Centos 7 - 静态IP设置
- SQL学习 欢迎来到SQL世界
- weblogic调整服务console时间和系统时间一致
- 限制UITextField输入内容的长度
- 自定义JS插件
- Swift 循环语句
- 浅析GTK 输入法模块 GTK IMContext
- Android —— NFC详解