HDU3033(分组背包)
2015-12-04 19:00
393 查看
题目大意:给你n个物品,每个物品有一种品牌(可以相同),也有一个价值,每个牌子至少买一个物品,同一个物品不能买多次,问怎样使买到的物品的价值最大?
#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<cmath> #include<string> using namespace std; const int maxn=10050; int dp[11][maxn]; int b[111],price[111],val[111]; int max_3(int x,int y,int z) { int p=max(x,y); int q=max(p,z); return q; } void init(int a,int b) { for(int i=1;i<=a;i++) { for(int j=0;j<=b;j++) { dp[i][j]=-1; } } } int main() { int n,m,num; while(scanf("%d%d%d",&n,&m,&num)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d%d%d",&b[i],&price[i],&val[i]); } init(num,m); for(int i=1;i<=num;i++) { for(int j=1;j<=n;j++) { if(b[j]==i)//对其分组,表示第i个款式 { for(int k=m;k>=price[j];k--) { dp[i][k]=max_3(dp[i][k],dp[i][k-price[j]]+val[j],dp[i-1][k-price[j]]+val[j]); /*取其三者的最大值*/ } } } } if(dp[num][m]<0) printf("Impossible\n"); else printf("%d\n",dp[num][m]); } return 0; }
相关文章推荐
- 视频编解码原理
- matlab之norm函数
- GreenDao常用操作(二)
- Webview里JS跳转到Activity页面
- 深度学习与计算机视觉系列(4)_最优化与随机梯度下降
- android-UI组件实例大全(一)------TextView文本框
- centos最新版solr5.3.1安装和数据整理以及遇到的问题解答
- 37、重分布配置实验之双点双向重分布
- 程序员的VIM配置
- android view类的xml属性,相关的方法与说明
- Linux学习篇之---scp命令
- 音视频同步原理[ffmpeg]
- 第十四周项目2二叉树排序树中查找的路径
- Java中的字符串常量池详细介绍
- mysql 安装 同步备份
- Android NDK and OpenCV Development With Android Studio
- 阅读源码利器—ctags的安装和配置
- mysql分表和表分区详解
- Search in Rotated Sorted Array II
- 删除一个非空目录