【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题

题目

Description

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

但是,奶牛们在哪个才是最好的游戏平台这个问题上产生了巨大的分歧。一只奶牛想要买一台Xbox 360来跑《光晕3》;另外一只奶牛想要一台任天堂Wii来跑《任天堂明星大乱斗X》;第三只奶牛想要在PlayStation 3上面玩《潜龙谍影4》,顺便还能看某些高画质的日本电影。

FJ想要在给定的预算内购入一些游戏平台和一些游戏,使他的奶牛们生产最多的奶牛以养育最多的孩子。

FJ研究了N(1 <= N <= 50)种游戏平台,每一种游戏平台的价格是P_i(1 <= P_i <= 1000),并且每一种游戏平台有G_i(1 <= G_i <= 10)个只能在这种平台上运行的游戏。很明显,奶牛必须先买进一种游戏平台,才能买进在这种游戏平台上运行的游戏。每一个游戏有一个游戏的价格GP_j(1 <= GP_j 价格 <= 100)并且有一个产出值PV_j(1 <= PV_j<= 1000000),表示一只牛在玩这个游戏之后会产出多少牛奶。

最后,农夫约翰的预算为V(1 <= V <= 100000),即他最多可以花费的金钱。请帮助他确定应该买什么游戏平台和游戏,使得他能够获得的产出值的和最大。

考虑下面的数据,有N种游戏平台,并且有V=800 预算

第一种游戏平台花费300并且有两个游戏,价格分别为30和25,它们的产出值如下所示:

游戏 #花费 产出值

1 30 50

2 25 80

第二种平台价格为600,并且只有一种游戏:

游戏 #花费 产出值

1 50 130

第三种平台价格为400,并且有三种游戏:

游戏 #花费 产出值

1 40 70

2 30 40

3 35 60

农夫约翰应该买第1和第3种平台,并且买平台1的游戏2,还有平台3的游戏1和游戏3。使得最后他最后的产出值最大,为210

预算: 800

平台 1 -300

游戏 2 -25 80

平台 3 -400

游戏 1 -40 70

游戏 3 -35 60

-------------------------------------------

总计: 0 (>= 0) 210

Input

第1行: 两个由空格隔开的整数: N和V

第2到第N+1行: 第i+1行表示第i种游戏平台的价格和可以在这种游戏平台上面运行的游戏。包含: P_i, G_i还有G_i对由空格隔开的整数GP_j, PV_j

Output

第1行: 农夫约翰在预算内可以得到的最大的产出值。

Sample Input

3 800

300 2 30 50 25 80

600 1 50 130

400 3 40 70 30 40 35 60

Sample Output

210

题解

题意

有\(n\)个平台,每个平台内有一些游戏

每个平台需要一定价格,每个游戏也需要一定价格,也给予一定价值

问在不超过预算的前提下的最大价值

分析

易想到DP

设\(f[i][j]\)表示第\(i\)个平台花了\(j\)元的最大价值

变量:

\(p\)表示当前平台价格

\(v\)表示预算

\(x\)表示游戏价格

\(y\)表示游戏价值

对于当前平台\(i\)

可以选择买平台而不买游戏

即\(f[i][j]=f[i-1][j-p]\)(\(j\)从\(p\)~\(v\))

然后对于当前平台做一次01背包

最后可能没有不买这个平台优

\(f[i][j]=max(f[i][j],f[i][j-1])\)

比赛总结

比赛的时候想到了DP

但是觉得可能是我不会的DP就放弃了

实际上十分简单

不能知难而退,应该知难而进

Code

#include<bits/stdc++.h>
using namespace std;
int n,v,p,t,x,y,f[55][100005];
int read()
{
int res=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+(ch-'0'),ch=getchar();
return res;
}
int main()
{
freopen("vidgame.in","r",stdin);
freopen("vidgame.out","w",stdout);
n=read();v=read();
for (int i=1;i<=n;++i)
{
p=read();t=read();
for (int j=p;j<=v;++j) f[i][j]=f[i-1][j-p];
for (int j=1;j<=t;++j)
{
x=read();y=read();
for (int j=v;j>=x+p;--j) f[i][j]=max(f[i][j],f[i][j-x]+y);
}
for (int j=0;j<=v;++j) f[i][j]=max(f[i][j],f[i-1][j]);
}
printf("%d\n",f[n][v]);
fclose(stdin);
fclose(stdout);
return 0;
}

【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题的更多相关文章

  1. 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T4 过路费

    [Usaco 2009 Gold]JZOJ2020年9月19日提高B组T4 过路费 题目 Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之 ...

  2. 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T3 头晕的奶牛

    [Usaco 2009 Gold]JZOJ2020年9月19日提高B组T3 头晕的奶牛 题目 Description 奶牛们发现,在农场里面赛跑是很有趣的一件事.可是她们一旦在农场里面不断地转圈,就会 ...

  3. 【Usaco 2009 Silver】JZOJ2020年9月19日提高B组T1 音乐节拍

    [Usaco 2009 Silver]JZOJ2020年9月19日提高B组T1 音乐节拍 题目 Description FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000) ...

  4. JZOJ2020年9月19日提高B组反思

    CSP第一轮倒计时:22天 JZOJ2020年9月19日提高B组反思 今天比的不好,只有签到题过了 130,rank 20 T1 签到题 用二分直接切 AC 100 T2 觉得是依赖背包问题 但是我没 ...

  5. 【2014广州市选day1】JZOJ2020年9月12日提高B组T3 消除游戏

    [2014广州市选day1]JZOJ2020年9月12日提高B组T3 消除游戏 题目 Description 相信大家玩过很多网络上的消除类型的游戏,一般来说就是在一个大拼图内找出相同的部分进行最大程 ...

  6. 【2014广州市选day1】JZOJ2020年9月12日提高B组T2 导弹拦截

    [2014广州市选day1]JZOJ2020年9月12日提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统 V1.0.但是这种导弹拦截系统有一个缺 ...

  7. 【2014广州市选day1】JZOJ2020年9月12日提高B组T4 字符串距离

    [2014广州市选day1]JZOJ2020年9月12日提高B组T4 字符串距离 题目 Description 给出两个由小写字母组成的字符串 X 和Y ,我们需要算出两个字符串的距离,定义如下: 1 ...

  8. JZOJ2020年9月12日提高B组反思

    CSP第1轮倒计时:29天 JZOJ2020年9月12日提高B组反思 T1 放在T1却是最难的一题 明显需要高精度 但是我小学奥数没学好,不知道怎么把正有理数转化成分数 T2 明显的DP 可惜的是我文 ...

  9. JZOJ2020年10月5日提高B组反思

    2020年10月5日提高B组反思 T1 考试的时候想简单了 觉得把跟没有攻占的点相连的边留下就可以了 没有考虑到最小 WA&RE 10 T2 没有思路 就直接从中间往后枚举分解处 蜜汁错误 W ...

随机推荐

  1. Ubuntu18.04上安装NS-3

    目录 第一步:处理gcc/g++版本 第二步:安装相关依赖 第三步:正式安装 第四步:测试 我自己前后安装过好几次NS3了,网上其他相关的博客质量都不是很好,因此自己总结了一个ns3的安装过程. 首先 ...

  2. 【杂谈】JS相关的线程模型整理

    1.JS是单线程吗? 是的,到目前为止,JS语言没有多线程的语法,它的执行引擎只支持单线程,也就是一个JavaScript进程内只有一个线程. 2.事件循环什么? 事件循环就是执行线程不断的从队列中取 ...

  3. ElasticSearch 集群基本概念及常用操作汇总(建议收藏)

    内容来源于本人的印象笔记,简单汇总后发布到博客上,供大家需要时参考使用. 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 目录: Elas ...

  4. 【转载】TCP/IP协议栈

    TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层和链路 ...

  5. asp.net利用SmtpClient发送邮件

    using System; using System.Data; using System.Web.UI; using System.Data.OracleClient; using DBUtilit ...

  6. kudu1.10基于cdh6.3.1搭建

    1.下载kudu依赖: yum -y install cyrus-sasl-plain ntp   2.下载kudu rpm包: wget https://archive.cloudera.com/c ...

  7. currentColor在CSS的含义

    currentColor属于CSS中的一个变量,当然也有人称之为CSS的自定义属性,其代表"当前颜色". 在CSS中设置了color的值后,相应CSS代码块(由两个花括号包裹的内容 ...

  8. IP 层收发报文简要剖析6--ip报文输出3 ip_push_pending_frames

    L4层的协议会把数据通过ip_append_data或ip_append_page把数据线放在缓冲区,然后再显示调用ip_push_pending_frames传送数据. 把数据放在缓冲区有两个优点, ...

  9. asp.net core 使用 TestServer 来做集成测试

    asp.net core 使用 TestServer 来做集成测试 Intro 之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestSe ...

  10. 一张900w的数据表,16s执行的SQL优化到300ms?

    一,前言 证实 有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fe ...