HDU 3033 分组背包
来源:互联网 发布:淘宝的盈利模式 编辑:程序博客网 时间:2024/05/21 11:06
这是我第一道分组背包。。
刷STEP时遇到的
还算比较简单哈。。在01背包的基础上状态多加一维就好了
状态转移方程f[i][j] 表示选了i种品牌花费j获得的最大值
f[i][p]=max(f[i][p],f[i][p-a[j].cost]+a[j].value);//选当前品牌的物品
f[i][p]=max(f[i][p],f[i-1][p-a[j].cost]+a[j].value);//添加当前品牌
#include<stdio.h>#include<string.h>int f[20][10010];int n,m,k;struct item{ int brand; int cost; int value;}a[110];int max(int a,int b){ return a>b?a:b;}void pack() { int i,j,p; for(i=1;i<=k;i++) { for(j=1;j<=n;j++) { for(p=m;p>=a[j].cost;p--) { if(a[j].branf==i) { f[i][p]=max(f[i][p],f[i][p-a[j].cost]+a[j].value);//选当前品牌的物品 f[i][p]=max(f[i][p],f[i-1][p-a[j].cost]+a[j].value);//添加当前品牌 } } } } }int main(){ while(scanf("%d%d%d",&n,&m,&k)==3) { memset(f,0,sizeof(f)); int i; for(i=1;i<=n;i++) { scanf("%d%d%d",&a[i].brand,&a[i].cost,&a[i].value); } pack(); if(f[k][m]==0) printf("Impossible\n"); else printf("%d\n",f[k][m]); } return 0;}
- HDU 3033 分组背包
- HDU 3033(分组背包)
- HDU 3033 分组背包
- hdu 3033 分组背包
- HDU 3033 分组背包
- HDU 3033 分组背包
- hdu 3033-分组背包
- hdu 3033(分组背包)
- hdu 3033 分组背包+01背包
- 06 分组背包 hdu 1712 3033
- hdu 3033 I love sneakers! 分组背包
- HDU 3033 I love sneakers! (分组背包)
- hdu 3033 I love sneakers!(分组背包)
- hdu 3033 I love sneakers! (分组背包)
- HDU 3033 I love sneakers! / 分组背包
- HDU 3033 I love sneakers! 分组背包
- HDU 3033 I love sneakers! 分组背包
- I love sneakers! hdu 3033 分组背包
- javascript正则表达式函数详解 .
- iphone push机制
- statspack参数设定
- 配置一台Exadata需要多少个IP地址?
- CentOS最小模式下安装VMtools之前要做的工作
- HDU 3033 分组背包
- 摄像头、视频采集和摄像设备图像质量判断的几种简单有效目测方法
- PIT 配置
- 用 Eclipse 平台进行 C/C++ 开发
- poj 3648
- asp--from子句语法错误
- 求两个等长升序序列的中位数 .
- YUV转RGB,无除法,无浮点运算
- 最新的Exadata版本