51nod 1086【背包·DP】
来源:互联网 发布:淘宝网上买手机可靠吗 编辑:程序博客网 时间:2024/05/16 17:36
思路:
如果体积乘以数量>=W,那么直接用完全背包模型。如果不到的话,用二进制优化就好了。
基础题,感觉这样写很优雅?回去睡觉。
#include <bits/stdc++.h>using namespace std;typedef long long LL;int dp[50010],n,W;int c,w,v;void zero_or_one(int val,int wi){for(int i=W;i>=wi;i--)dp[i]=max(dp[i],dp[i-wi]+val);}void complete(int val,int wi){for(int i=wi;i<=W;i++)dp[i]=max(dp[i],dp[i-wi]+val);}int main(){int k;scanf("%d%d",&n,&W);memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){scanf("%d%d%d",&w,&v,&c);if(c*w>=W)complete(v,w);else{k=1;while(k<c){int ww=w*k;int vv=v*k;zero_or_one(vv,ww);c-=k;k<<=1;}k=c;int ww=w*k;int vv=v*k;zero_or_one(vv,ww);}}printf("%d\n",dp[W]);return 0;}
0 0
- 51nod 1086【背包·DP】
- 51nod 1086 背包问题V2 (巧妙dp,二进制)
- 51nod 01背包(DP)
- 51nod 多重背包问题 (dp)
- 51Nod 1085背包问题(dp)
- [背包DP || 多项式] 51Nod 1597 有限背包计数问题
- 51nod-1086 背包问题(多重背包)
- 51nod-1086 多重背包
- 51nod 1101 换零钱 (0-1背包,DP)
- 51nod 1101 找零问题 dp (01背包问题)
- 51nod-正整数分组问题(基础方程DP-01背包)
- 51nod 0-1背包详解dp(加一维优化)
- 51Nod - 1503 多线程dp + 背包思想优化
- 51nod 1597 有限背包计数问题 dp
- 51nod 1007 正整数分组(背包/dp)
- [DP] 51Nod 1597 有限背包计数问题
- [DP]51 Nod 1597——有限背包计数问题
- 51nod 1597 有限背包计数问题[dp][阈值]
- android 拍照及录短视频---练习
- java异常处理及设计
- Clang插件学习 Clang插件常用API
- sublime插件整理
- Uva11093 Just Finish it up【模拟】【例题8-13】
- 51nod 1086【背包·DP】
- 每日一省之————加权有向图的最短路径问题
- openstack虚拟机发放速度优化
- 字符串(一)strlen、strcpy、strcat的实现
- Android PopupWindow的使用技巧 Android上自定义弹出窗口
- 从键盘输入一个整数,然后逆序输出
- 史上最详细的iOS之事件的传递和响应机制-原理篇
- java零基础的外行人
- Phoenix在建表是报出java.lang.ArrayIndexOutOfBoundsException的处理方法