题目描述

Farmer John's cows love their video games! FJ noticed that after playing these games that his cows produced much more milk than usual, surely because contented cows make more milk.

The cows disagree, though, on which is the best game console. One cow wanted to buy the Xbox 360 to play Halo 3; another wanted to buy the Nintendo Wii to play Super Smash Brothers Brawl; a third wanted to play Metal Gear Solid 4 on the PlayStation 3. FJ wants to purchase the set of game consoles (no more than one each) and games (no more than one each -- and within the constraints of a given budget) that helps his cows produce the most milk and thus nourish the most children.

FJ researched N (1 <= N <= 50) consoles, each with a console price P_i (1 <= P_i <= 1000) and a number of console-specific games G_i (1 <= G_i <= 10). A cow must, of course, own a console before she can buy any game that is specific to that console. Each individual game has a game price GP_j (1 <= GP_j price <= 100) and a production value (1 <= PV_j <= 1,000,000), which indicates how much milk a cow will produce after playing the game. Lastly, Farmer John has a budget V (1 <= V <= 100,000) which is the maximum amount of money he can spend. Help him maximize the sum of the production values of the games he buys.

Consider one dataset with N=3 consoles and a V=800budget.Thefirstconsolecosts800 budget. The first console costs 800budget.Thefirstconsolecosts300 and has 2 games with cost 30and30 and 30and25 and production values as shown:

Game # Cost Production Value

1 $30 50

2 $25 80

The second console costs $600 and has only 1 game:

Game # Cost Production Value

1 $50 130

The third console costs $400 and has 3 games:

Game # Cost Production Value

1 $40 70

2 $30 40

3 $35 60

Farmer John should buy consoles 1 and 3, game 2 for console 1, and games 1 and 3 for console 3 to maximize his expected production at 210:

                            Production Value
Budget: $800
Console 1 -$300
Game 2 -$25 80
Console 3 -$400
Game 1 -$40 70
Game 3 -$35 60
-------------------------------------------
Total: 0 (>= 0) 210

农夫约翰的奶牛们游戏成瘾!本来约翰是想要按照调教兽的做法拿她们去电击戒瘾的,可是 后来他发现奶牛们玩游戏之后比原先产更多的奶.很明显,这是因为满足的牛会产更多的奶.

但是,奶牛们在哪个才是最好的游戏平台这个问题上产生了巨大的分歧.约翰想要在给定的 预算内购入一些游戏平台和一些游戏,使他的奶牛们生产最多的奶牛以养育最多的孩子.

约翰研究了N种游戏平台,每一种游戏平台的价格是Pi 并且每一种游戏平台有Gi个只能在这种平台上运行的游戏.很明显,奶牛必须 先买进一种游戏平台,才能买进在这种游戏平台上运行的游戏.每一个游戏有一个游戏的价 格GPi并且有一个产出值PVj< 1000000),表示一只牛在玩这个游戏之后会产出多少牛奶.最后,农夫约翰的预算为V<100000),即他最多可以花费的金钱.请 帮助他确定应该买什么游戏平台和游戏,使得他能够获得的产出值的和最大.

输入输出格式

输入格式

  • Line 1: Two space-separated integers: N and V

  • Lines 2..N+1: Line i+1 describes the price of and the games

available for console i; it contains: P_i, G_i, and G_i pairs of space-separated integers GP_j, PV_j

输出格式

  • Line 1: The maximum production value that Farmer John can get with his budget.

样例

INPUT

3 800

300 2 30 50 25 80

600 1 50 130

400 3 40 70 30 40 35 60

OUTPUT

210

SOLUTION

多重背包dp

考场上写崩掉了,没事瞎用树形dp的正在面壁思过中。。。

其实本体的思路应该是非常清晰的,所以这里重点还是看一下代码的实现吧。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
typedef long long LL;
#define Max(a,b) ((a>b)?a:b)
#define Min(a,b) ((a<b)?a:b)
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-48;ch=getchar();}
return x*f;}
const int N=550,M=101000;
short n,m,V,cnt=0,id=0;
int f[2][M],ans=0;
int main(){
int i,j;
n=read();V=read();memset(f,0,sizeof(f));
for (i=1;i<=n;++i){
int p=read(),g=read();
for (j=p;j<=V;++j) f[i&1][j]=f[(i-1)&1][j-p];//先扣去买这个平台的游戏的平台费用
while (g--){
int cst=read(),pdc=read();
for (j=V;j>=cst+p;--j)
f[i&1][j]=Max(f[i&1][j],f[i&1][j-cst]+pdc);//正常的背包转移
}
for (j=0;j<=V;++j) f[i&1][j]=Max(f[i&1][j],f[(i-1)&1][j]);//或者我们索性不买这个平台
}
printf("%d\n",f[n&1][V]);
return 0;
}

最新文章

  1. PHP易混淆函数的区分方法及意义
  2. Java处理excel文件
  3. 使用Jsoup 抓取页面的数据
  4. Ztree异步加载自动展开节点
  5. Linux之更好的使用Bash
  6. 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现
  7. 指针和引用的比较(P105)
  8. Scala闭包
  9. 【CF】142 Div.1 B. Planes
  10. Delphi的VMT的结构图,很清楚
  11. JavaScript基础学习(三)&mdash;数组
  12. Python实现浏览器自动化操作
  13. SVN同步出现问题
  14. Vue.js-01:第一章 - 一些基础概念
  15. 服务器硬件与linux系统
  16. fzu1062 洗牌问题(思路模拟)
  17. 八,ESP8266 文件保存数据(基于Lua脚本语言)
  18. 【转】Java计算文件的hash值
  19. VMware11 安装MAC OS X 10.9
  20. Team++_炸弹人软件需求说明书

热门文章

  1. 牛客小白月赛18——Forsaken的三维数点
  2. 动态加载JS文件方法总结
  3. nodejs(6)express学习
  4. UVALive 3983 捡垃圾的机器人 DP
  5. 2.Git基本配置
  6. 第二季第六天 part2 css动画
  7. TX2在Turtlebot测试kobuki
  8. Baes.css
  9. APP-计算器
  10. C++代码质量度量工具大阅兵