HDU 3033 I love sneakers!(分组背包变形)
来源:互联网 发布:电脑主题软件排行 编辑:程序博客网 时间:2024/05/16 09:49
题目链接:Click here~~
题意:
有n件物品被分成K组,背包容量为M,要求每组物品至少取1件,求最大价值。
解题思路:
由于至少取1件,所以我们要想办法标记合法状态。
初始设dp[0][i]为0,其余全部为-1,-1表示非法状态。
另外,要将原本分组背包中的两层循环调换下位置,否则只能将那组的一件物品放入背包。
trick:数据中有费用为0的物品,所以if不能交换位置,否则可能会将费用为0的物品放入背包两次。
写代码时候一个k写成了i,WA完找了1小时+,rbl。
#include <stdio.h>#include <string.h>#define max(a,b) a > b ? a : bstruct TT{ int num,c[101],w[101];}A[11];int dp[11][10005];int main(){ int n,V,K,t; while(~scanf("%d%d%d",&n,&V,&K)) { memset(A,0,sizeof(A)); memset(dp,-1,sizeof(dp)); memset(dp[0],0,sizeof(dp[0])); while(n--) { scanf("%d",&t); int &m = A[t].num; scanf("%d%d",&A[t].c[m],&A[t].w[m]); ++m; } for(int k=1;k<=K;k++) for(int i=0;i<A[k].num;i++) for(int j=V;j>=A[k].c[i];j--) { if(dp[k][ j-A[k].c[i] ] != -1) dp[k][j] = max(dp[k][j],dp[k][ j-A[k].c[i] ] + A[k].w[i]); if(dp[k-1][ j-A[k].c[i] ] != -1) dp[k][j] = max(dp[k][j],dp[k-1][ j-A[k].c[i] ] + A[k].w[i]); } if(dp[K][V] < 0) puts("Impossible"); else printf("%d\n",dp[K][V]); } return 0;}
- 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 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 分组背包
- hdu 3033 I love sneakers! 分组背包
- hdu 3033 I love sneakers! (分组背包)
- hdu 3033 I love sneakers! 分组背包
- hdu 3033 I love sneakers! 分组背包
- 【设计模式】加薪非要老总批 --- 职责链模式
- JAVA日期操作类
- Cookie和session的区别,从六点上来进行比较
- 让整个网站变灰的样式
- jQuery(查询方法)——children()和siblings()方法的理解
- HDU 3033 I love sneakers!(分组背包变形)
- Tomcat 源代码分析之Socket通讯
- GDI+ 之环境配置
- 写一个.h的头文件
- 在server2008 上进行impdp引发的血案(ORA-39070)
- ffmpeg: ‘UINT64_C’ was not declared in this scope
- POJ 1742 Coins(背包问题)
- HtmlParser设计解析(1) - 解析器模式(Interpreter)
- jquery的focus()在设置内容后光标位置问题