HDU 3033 I love sneakers!(分组背包变形)
2015-07-27 20:28
483 查看
题目链接:http://http://acm.hdu.edu.cn/showproblem.php?pid=3033
题意:
n组数据,m元钱,k种小吃
每组数据包含a,b,c a:小吃种类 b:小吃价格 c:小吃价值
每种小吃买至少有1个
如果不能达到要求,就输出Impossible
否则就输出小吃的最大价值
思路:
这不是明显的分组背包,需要自己去变形
将同一种类的小吃归到一起
dp[ i ][ x ]代表第i种小吃容量为x的价值
转移方程就是:
dp[i][x] = max(dp[i][x],dp[i][x-p[i][j].w]+p[i][j].v)
dp[i][x] = max(dp[i][x],dp[i-1][x-p[i][j].w]+p[i][j].v)
这两个的位置不能换
当i=1,p[ i ][ j ].w=0时
如果调换顺序
dp[ i ][ x ]会被加了两次
导致答案出错,wa了好几把,就是这里错了
题意:
n组数据,m元钱,k种小吃
每组数据包含a,b,c a:小吃种类 b:小吃价格 c:小吃价值
每种小吃买至少有1个
如果不能达到要求,就输出Impossible
否则就输出小吃的最大价值
思路:
这不是明显的分组背包,需要自己去变形
将同一种类的小吃归到一起
dp[ i ][ x ]代表第i种小吃容量为x的价值
转移方程就是:
dp[i][x] = max(dp[i][x],dp[i][x-p[i][j].w]+p[i][j].v)
dp[i][x] = max(dp[i][x],dp[i-1][x-p[i][j].w]+p[i][j].v)
这两个的位置不能换
当i=1,p[ i ][ j ].w=0时
如果调换顺序
dp[ i ][ x ]会被加了两次
导致答案出错,wa了好几把,就是这里错了
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> using namespace std; int num[15]; struct node { int v,w; }p[15][105]; int dp[15][10005]; int main() { int n,m,k; while(~scanf("%d%d%d",&n,&m,&k)) { memset(p,0,sizeof(p)); memset(num,0,sizeof(num)); int a,b,c; for(int i=0;i<n;i++) { scanf("%d%d%d",&a,&b,&c); p[a][num[a]].w=b;//变形为典型的分组背包形式 p[a][num[a]].v=c; num[a]++; } memset(dp,-1,sizeof(dp)); memset(dp[0],0,sizeof(dp[0])); for(int i=1;i<=k;i++) { for(int j=0;j<num[i];j++) { for(int x=m;x>=p[i][j].w;x--) { dp[i][x] = max(dp[i][x],dp[i][x-p[i][j].w]+p[i][j].v); dp[i][x] = max(dp[i][x],dp[i-1][x-p[i][j].w]+p[i][j].v); } } } if(dp[k][m]==-1) { printf("Impossible\n"); continue; } printf("%d\n",dp[k][m]); } return 0; }
相关文章推荐
- numpy函数库中一些常用函数的记录
- Postgres并发控制之快照与MVCC
- CodeForces-137A Postcards and photos
- java设计模式之基本原则
- python学习笔记(一)
- ContentObserver——窃听用户发出的短信
- The summary of competition season
- Codeforces#313
- POJ 2777 Count Color(区间更新 + 状压)
- 【图文】细说日本动画的发展史
- 根据指定时间找出最接近的预约时间
- handsontable-integrations
- 如何更好的建设网站外链
- 碎片时间学习
- 课程设计----员工管理系统
- 动态规划求最大子段和
- 一个简单的网络爬虫-从网上爬取美女图片
- S3C2440 解决LCD图像偏移问题
- mysql进阶(八)怎么对varchar类型排序问题
- 在Android中如何侦听Service内部的状态