hdu3732 多重背包+二进制优化
2016-03-20 02:42
288 查看
题意:n件物品,背包大小为C,每件物品有一定的价值和体积,求背包能装的最大价值。
思路:如果用01背包做肯定超时,因为数据给得太大了,我们可以根据价值和体积来区分物品,相当于背包空间和含有的价值 有多个,多重背包,然后用二进制优化,再用01背包来做;
代码:
思路:如果用01背包做肯定超时,因为数据给得太大了,我们可以根据价值和体积来区分物品,相当于背包空间和含有的价值 有多个,多重背包,然后用二进制优化,再用01背包来做;
代码:
#include<stdio.h> #include<string.h> #include<stdio.h> #define max(x,y) (x>y?x:y) int dp[10005]; int main() { int map[11][11]; int t,s; while(~scanf("%d%d",&t,&s)) { int i,j,k,l; char c[10001]; memset(map,0,sizeof(map)); memset(dp,0,sizeof(dp)); for(i=1;i<=t;i++) { scanf("%s%d%d",c,&j,&k); getchar(); map[j][k]+=1; } for(i=1;i<=10;i++) { for(j=1;j<=10;j++) { int tt=1,zz=map[i][j]; while(tt<zz) { for(k=s;k>=tt*j;k--) dp[k]=max(dp[k],dp[k-tt*j]+tt*i); zz-=tt; tt*=2; } for(k=s;k>=zz*j;k--) dp[k]=max(dp[k],dp[k-zz*j]+zz*i); } } printf("%d\n",dp[s]); } }
相关文章推荐
- JPush 极光推送 消息推送 实例
- knockout+bootstrap--一些复杂的应用合集
- spi摘录
- System and device programming lab2---gdb(debug)pthread,matrix
- jquery小技巧
- Sublime Text3快捷方式总结
- IDA Pro ARM指令集和Thumb指令集的切换
- GO语言网络编程之TCP (v2)
- 从零开始_学_数据结构(一)——算法的基本概念
- 全局变量,局部变量,形式参数
- C语言32个关键字
- 浮点数的比较
- 声明,定义,赋值和初始化
- wampserver平台搭建
- 线程控制 - _beginthreadex的封装类
- ArrayList和Vector的区别
- Xcode真机调试报错(证书的签发者无效)
- 缓冲区
- mybatis 传入int=0 小坑
- 声明,定义,赋值,初始化的区别