金明的预算方案
2014-04-25 21:03
211 查看
Problem Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要
购买哪些物品,怎么布置,你说了算,只有不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件和附件,附件是
从属于某个主件的,下表就是一些主件宇附件的例子: 主件 附件 电脑 打印机,扫描仪 书柜 图书 书桌 台灯,文具 工作椅 无 如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西
很多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1-5表示,第5等最重要。他还从互联网上查到了每
件物品的价格(都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。 设第j件物品的价格为v[j],重要度为w[j],供选中了k件物品,编号依次为j1,j2,...,jk,则所求的总和为: v[j1]*w[j1]+v[j2]*w[j2]+...+v[jk]*w[jk] 请你帮助金明设计一个满足要求的购物单。 Input 输入有多组数据,每组数据第1行为两个整数,用一个空格隔开:N m(其中N<32000表示总钱数,m<60为希望购买物品的个数),从第2行到
第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有3个非负整数v p q(其中v表示该物品的价格v<10000,p表示该物品的重要的重要
度1-5,q表示该物品是主件还是附件。如果 q=0,表示该物品时主件,如果q>0表示该物品为附件,q是所属主件的编号) Output 对于每组输入,输出一个正整数为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<200000) Sample Input 1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0 Sample Output 2200
//标程:
#include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; int p[70], w[70], q[70], dp[4000]; struct ss { int p; int v; }d[70][5]; int max(int x,int y) { return x > y ? x : y; } int main() { // freopen("a.txt","r",stdin); int n, m, i, j; while(cin >> n >> m) { n /= 10; memset(d,0,sizeof(d)); memset(dp,0,sizeof(dp)); for(i = 1; i <= m; i ++) { cin >> p[i] >> w[i] >> q[i]; p[i] /= 10; if(q[i]) { if(d[q[i]][2].p == 0) { d[q[i]][2].p = p[i]; d[q[i]][2].v = p[i]*w[i]; } else { d[q[i]][3].p = p[i]; d[q[i]][3].v = p[i]*w[i]; } } else { d[i][1].p = p[i]; d[i][1].v = p[i]*w[i]; } } for(i = 1; i <= m; i ++) { for(j = n; j > 0; j --) { if(j >= d[i][1].p) dp[j] = max(dp[j],dp[j-d[i][1].p]+d[i][1].v); if(j >= d[i][1].p+d[i][2].p) dp[j] = max(dp[j],dp[j-d[i][1].p-d[i][2].p]+d[i][1].v+d[i][2].v); if(j >= d[i][1].p+d[i][3].p) dp[j] = max(dp[j],dp[j-d[i][1].p-d[i][3].p]+d[i][1].v+d[i][3].v); if(j >= d[i][1].p+d[i][2].p+d[i][3].p) dp[j] = max(dp[j],dp[j-d[i][1].p-d[i][2].p-d[i][3].p]+d[i][1].v+d[i][2].v+d[i][3].v); } } cout << dp *10 << endl; } return 0; }
相关文章推荐
- 洛谷P1064 金明的预算方案(DP,0-1背包)
- SDNU 1179.金明的预算方案【NOIP 2006 提高组】【背包问题】【7月30】
- vijos 金明的预算方案
- luogu P1064 金明的预算方案
- 蓝桥杯 - 金明的预算方案
- 【DP】洛谷 P1064 金明的预算方案
- P1313金明的预算方案 动态规划(未解决)
- 蓝桥杯 算法提高 金明的预算方案
- 洛谷 P1064 金明的预算方案(背包dp)
- (01背包扩展) 算法提高 金明的预算方案
- [NOIP2006]金明的预算方案
- NOIP 2006 金明的预算方案(带条件的01背包)
- RQNOJ 金明的预算方案
- T1155 金明的预算方案 codevs
- 金明的预算方案--分组背包
- 算法提高 金明的预算方案
- noip2006 金明的预算方案 (有依赖的背包转化为01背包)
- 1155 金明的预算方案
- NOIP2006 金明的预算方案
- NOIP2006金明的预算方案[DP 有依赖的背包问题]