NOIP 2006 T2 金明的预算方案
题目描述
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:
主件 附件
电脑 打印机,扫描仪
书柜 图书
书桌 台灯,文具
工作椅 无
如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有00个、11个或22个附件。附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的NN元。于是,他把每件物品规定了一个重要度,分为55等:用整数1-51−5表示,第55等最重要。他还从因特网上查到了每件物品的价格(都是1010元的整数倍)。他希望在不超过NN元(可以等于NN元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
设第jj件物品的价格为v_[j]v[j],重要度为w_[j]w[j],共选中了kk件物品,编号依次为j_1,j_2,…,j_kj1,j2,…,jk,则所求的总和为:
v_[j_1] \times w_[j_1]+v_[j_2] \times w_[j_2]+ …+v_[j_k] \times w_[j_k]v[j1]×w[j1]+v[j2]×w[j2]+…+v[jk]×w[jk]。
请你帮助金明设计一个满足要求的购物单。
输入输出格式
输入格式:
第11行,为两个正整数,用一个空格隔开:
N mNm (其中N(<32000)N(<32000)表示总钱数,m(<60)m(<60)为希望购买物品的个数。) 从第22行到第m+1m+1行,第jj行给出了编号为j-1j−1的物品的基本数据,每行有33个非负整数
v p qvpq (其中vv表示该物品的价格(v<10000v<10000),p表示该物品的重要度(1-51−5),qq表示该物品是主件还是附件。如果q=0q=0,表示该物品为主件,如果q>0q>0,表示该物品为附件,qq是所属主件的编号)
输出格式:
一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<200000)。
/* 用一个鬼畜的方法写了出来,开森开森(/≧▽≦)/ */
首先将每一个主件用0/1背包处理,用f[j - v[i]] + p[i]来更新f[i],如果能够更新,就枚举这个主件的每一个附件f[j] + p[k]去更新f[j + v[k]](k为附件);如果只是这样的话,有一种主件会亏,但附件血赚的情况就没有考虑;所以先将这个主件不更新的值记录下来,假设这个主件被买,用附件去更新后面,最后再用这个记录的值去更新到底买不买主件;这段代码鬼畜的地方在于假设这个点被更新,被更新后还要更新已经被更新过的点,并且最后还要判断这个点需不需要更新;
#include <bits/stdc++.h>using namespace std;#define ll long long #define INF 0x3f3f3f3f #define MAXN 10100000 #define MAXM 3010 #define _ 0template < typename T > inline void read(T &x) {x = 0;T ff = 1, ch = getchar();while(!isdigit(ch)) {if(ch == '-') ff = -1;ch = getchar();}while(isdigit(ch)) {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}x *= ff; }int n,m,ans,f[MAXN],v[MAXN],p[MAXN],q[MAXN]; vector < int > a[70];int main() {read(n); read(m);for(int i = 1; i <= m; ++i) {read(v[i]);read(p[i]);read(q[i]);p[i] *= v[i];if(q[i] > 0) a[q[i]].push_back(i);}for(int i = 1; i <= m; ++i) {if(!q[i]) {for(int j = n; j >= v[i]; --j) { // if(f[j - v[i]] + p[i] > f[j]) {int maxx = f[j];f[j] = f[j - v[i]] + p[i]; // } for(int k = 0; k < a[i].size(); ++k) {if(j + v[a[i][k]] <= n && f[j + v[a[i][k]]] < f[j] + p[a[i][k]])f[j + v[a[i][k]]] = f[j] + p[a[i][k]];} if(a[i].size() == 2) {if(j + v[a[i][0]] + v[a[i][1]] <= n && f[j + v[a[i][1]] + v[a[i][0]]] < f[j] + p[a[i][0]] + p[a[i][1]])f[j + v[a[i][1]] + v[a[i][0]]] = f[j] + p[a[i][0]] + p[a[i][1]];} /*if(f[j - v[i]] + p[i] > f[j]) {f[j] = f[j - v[i]] + p[i]; } */ f[j] = max(f[j],maxx); }}}for(int i = 1; i <= n; ++i) ans = max(ans,f[i]);printf("%d\n",ans);return (0^_^0); }
转载于:https://www.cnblogs.com/AK-ls/p/10596712.html
NOIP 2006 T2 金明的预算方案相关推荐
- 金明的预算方案(分组背包)
T2 金明的预算方案 http://www.tyvj.cn/p/1057 背景 NOIP2006 提高组 第二道 描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房 ...
- P1064 金明的预算方案
P1064 金明的预算方案 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置 ...
- bsoj 1512 金明的预算方案(树型DP)
[NOIP 2006提高]金明的预算方案 Time Limit:10000MS Memory Limit:65536K Total Submit:485 Accepted:222 Case T ...
- 【每日DP】day7P1064 金明的预算方案 (分组背包,我又悟了)难度⭐⭐★
P1064 金明的预算方案 背包其实就是把一个大问题拆分成若干个子问题,把一个要拿东西的动作按照题目要求分成若干个动作,分别枚举(DP其实就是非常的暴力),比较取最大值. 比如这道题,背包的物品之间是 ...
- [LuoguP1064][Noip2006]金明的预算方案
金明的预算方案(Link) 题目描述 现在有\(M\)个物品,每一个物品有一个钱数和重要度,并且有一个\(Q\),如果\(Q = 0\),那么该物件可以单独购买,当\(Q != 0\)时,表示若要购买 ...
- P1064 [NOIP2006 提高组] 金明的预算方案
P1064 [NOIP2006 提高组] 金明的预算方案 题意: 每个物品有价格和价值,物品之间存在依赖关系(单向的),现在又n元钱,买哪些物品,即满足依赖关系又使得每件物品的价格与价值的乘积的总和最 ...
- 不止代码:洛谷P1064 金明的预算方案+P2014选课(依赖背包)
文章目录 题目描述 总结 解析 解法1 解法2 代码 解法3 代码 题目描述 金明的预算方案 选课 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是, ...
- 背包形动态规划 fjutoj2375 金明的预算方案
金明的预算方案 TimeLimit:1000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description 金明今天很开 ...
- 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案
[题目链接] ybt 1844:[06NOIP提高组]金明的预算方案 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 [题目考点] 1. 动态规划:分组背包 2. 动态规划:依赖背包 ...
最新文章
- JavaScript改变 HTML 内容
- 德国阿尔迪成功启示录(转载)
- vs增量链接、清单文件
- Proactor设计模式
- mysql slow time_mysql使用slow log
- 设计模式整理之简单工厂
- 计数排序vs基数排序vs桶排序
- rlwrap解决sqlplus上下键和backspace键找历史命令
- PyTorch 多目标跟踪
- 极递云课显示服务器连接超时,服务器连接问题
- WindowsServer2012 DFS配置出错原因
- 使用组合改进软件测试用例的生成2
- CI框架源码学习笔记7——Utf8.php
- H5商城与小程序商城哪个好_应该怎么选择_OctShop
- 博弈论分析题_“博弈论”习题和参考答案与解析
- 加速Web开发的9款知名HTML5框架
- 通过金矿模型介绍动态规划(转)
- 【Vue】Emitted value instead of an instance of Error
- 送你4句口诀 云存储选型不再犯难
- Kibana数据表格