题目描述

翰的奶牛玩游戏成瘾!本来约翰是想把她们拖去电击治疗的,但是他发现奶牛们在玩游戏后生产
了更多的牛奶,也就支持它们了。
但是,奶牛在选择游戏平台上的分歧很大:有些奶牛想买 Xbox 360 来跑《光晕 3》;有的奶牛想
要任天堂 Wii 来跑《明星大乱斗 X》;还有奶牛想要在 PlayStation 3 上玩《潜龙谍影 4》。约翰只有
V 元钱,不够多,要做一些取舍才行。
已知市面上有 K 种游戏平台,如果想玩第 i 种平台的游戏,必须先买一台该平台的游戏机,价
格为 C i 。第 i 种平台上有 S i 种游戏,其中第 j 个游戏的价格为 P i,j ,奶牛玩过这个游戏后的产出为
E i,j 。如果想玩同一平台上的多个游戏,只要买一台游戏机就够了。请帮助约翰选择买哪些游戏机和
游戏,才能使奶牛的产奶效益之和最大?注意同一个游戏买两次是不会产生双倍效益产生的。

输入

• 第一行:两个整数 K 和 V ,1 ≤ K ≤ 50,1 ≤ V ≤ 10 6
• 第二行到第 K + 1 行:第 i + 1 行首先有两个整数 C i 和 S i ,1 ≤ C i ≤ 10 6 ,1 ≤ S i ≤ 10,其次
有 S i 对整数 P i,j 和 E i,j ,1 ≤ P i,j ≤ 10 6 ,1 ≤ E i,j ≤ 10 6

输出

• 单个整数:表示可以得到的最大产出之和

样例输入

3 800 300 2 30 50 25 80 600 1 50 130 400 3 40 70 30 40 35 60

样例输出

210

提示

购买第一种游戏平台上的第二个游戏,以及

第三种游戏平台上的第一个和第三个游戏,恰好
花去 300 + 25 + 400 + 40 + 35 = 800 元,产出为
80 + 70 + 60 = 210
题解:
捆绑背包加强版,分选该平台和不选两种情况 于是我们设F[i][j]为前i个平台花j元的最大产出
我们假设买了该平台,设nd为买该平台的钱 那么F[i][j]=F[i-1][j-nd] 先转移过来
然后再用所有的游戏进行01背包 然后枚举需要限制.
背包完之后拿F[i][j]和F[i][j-1]比较,表示选不选该平台
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=55,MAXN=1000005;
 7 int F[N][MAXN];
 8 int gi(){
 9     int str=0;char ch=getchar();
10     while(ch>'9'||ch<'0')ch=getchar();
11     while(ch>='0' && ch<='9')str=str*10+ch-48,ch=getchar();
12     return str;
13 }
14 int main()
15 {
16     int n=gi(),m=gi(),nd,num=0,x,y;
17     for(int i=1;i<=n;i++)
18     {
19         nd=gi();num=gi();
20         for(int j=nd;j<=m;j++)F[i][j]=F[i-1][j-nd];
21         for(int j=1;j<=num;j++)
22         {
23             x=gi();y=gi();
24             for(int k=m;k>=x+nd;k--)
25             {
26                 F[i][k]=max(F[i][k-x]+y,F[i][k]);
27             }
28         }
29         for(int j=0;j<=m;j++)F[i][j]=max(F[i][j],F[i-1][j]);
30     }
31     printf("%d",F[n][m]);
32     return 0;
33 }

转载于:https://www.cnblogs.com/Yuzao/p/6992342.html

【USACO】电子游戏 有条件的背包相关推荐

  1. USACO 2.3 货币系统(背包/生成函数)

    Description 母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统. [In their own rebellious way],他们对货币的数值感到好奇. 传统地,一个货币系统是由 ...

  2. UVA-12563劲歌金曲——双重优先条件+变形01背包

    劲歌金曲 题意: 两个优化: ①唱歌次数最大 ②时间最长 以①为首选条件 01背包模型,歌曲就是物品,时长就是体积,每首歌唱或不唱就对应物品的选或不选. 核心代码: 状态: num[i],表示时长为i ...

  3. 目标和(01背包应用)

    给你一个整数数组 nums 和一个整数 target . 向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 ...

  4. java完全背包,一次性解决三种背包问题

    前言 首先,大概讲一下什么是"背包"问题:背包问题是指你有一个容量为V的背包,然后有n个物品在你面前,你要怎么装才能使得背包里的物品总价值最大.而每种物品是只有1个,还是有多个,亦 ...

  5. [OI]字符串DP小结

    顾名又思义,是在字符串上进行的DP操作.因为字符串本身可以看作是一个序列,所以有些时候字符串DP可以用区间DP来解决. P2246 SAC#1 - Hello World(升级版) 题目描述 在讲义的 ...

  6. noip2006总结

    T1 能量项链 原题 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子 ...

  7. 浅析拯救小矮人的 nlogn 算法及其证明

    浅析拯救小矮人的 nlogn 算法及其证明 题型简介: 有 $ n $ 个人,第 $ i $ 个人身高 $ a_i $ 手长 $ b_i $ ,他们为了从一个高为 $ H $ 的洞中出去,决定搭人梯. ...

  8. java字符串匹配dp_[OI]字符串DP小结

    顾名又思义,是在字符串上进行的DP操作.因为字符串本身可以看作是一个序列,所以有些时候字符串DP可以用区间DP来解决. P2246 SAC#1 - Hello World(升级版) 题目描述 在讲义的 ...

  9. 蓝桥杯2017 包子凑数

    小明几乎每天早晨都会在一家包子铺吃早餐.他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子.每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包 ...

最新文章

  1. Java项目:进销存系统(java+Gui)
  2. react antd 动态表单
  3. linux设备驱动归纳总结(六):2.分享中断号【转】
  4. 微信公众号--消息回复
  5. ACM_逆序数(归并排序)
  6. 128_Power BI父级排名TOPN子级动态展示
  7. tomcat 使用log4j 管理日志
  8. 【短时能量】基于matlab语音信号短时能量【含Matlab源码 1719期】
  9. 七个基本量纲_超星尔雅三维建模与仿真答案题库
  10. 快速部署开源的 Java 博客系统 Tale
  11. 手把手教你用移远M26/BC28的 MQTT协议 对接阿里云IoT平台
  12. 《数字信号处理教程》利用matlab实现常用序列
  13. Unity|一键复制log日志|小技巧
  14. t430服务器安装系统,Dell PowerEdge T430
  15. md文档html显示+toc,使用md-toc.js来生成文章目录
  16. 如何检查计算机上安装的DirectX版本?
  17. java--for循环执行的顺序
  18. useradd 与adduser的区别
  19. 动态规划之求解三角形最小路径问题
  20. Anaconda安装Jupyter Notebook及使用

热门文章

  1. 大数据互联网架构阶段 Redis(二)
  2. 【机器视觉】 dev_unmap_prog算子
  3. 【Linux网络编程】并发服务器之多进程模型
  4. 【Linux】一步一步学Linux——trap命令(229)
  5. 【Linux】一步一步学Linux——nstat命令(190)
  6. 【Linux】一步一步学Linux——arpd命令(184)
  7. 【Linux】一步一步学Linux——dhclient命令(156)
  8. 【IT资讯】TIOBE 7月编程语言排行榜显示,这些编程语言更吃香
  9. java类型比较_Java数据类型的比较
  10. 行车记录仪设置php,【必看】如何正确的设置“行车记录仪”