题目描述

翰的奶牛玩游戏成瘾!本来约翰是想把她们拖去电击治疗的,但是他发现奶牛们在玩游戏后生产
了更多的牛奶,也就支持它们了。
但是,奶牛在选择游戏平台上的分歧很大:有些奶牛想买 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]比较,表示选不选该平台
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,MAXN=;
int F[N][MAXN];
int gi(){
int str=;char ch=getchar();
while(ch>''||ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-,ch=getchar();
return str;
}
int main()
{
int n=gi(),m=gi(),nd,num=,x,y;
for(int i=;i<=n;i++)
{
nd=gi();num=gi();
for(int j=nd;j<=m;j++)F[i][j]=F[i-][j-nd];
for(int j=;j<=num;j++)
{
x=gi();y=gi();
for(int k=m;k>=x+nd;k--)
{
F[i][k]=max(F[i][k-x]+y,F[i][k]);
}
}
for(int j=;j<=m;j++)F[i][j]=max(F[i][j],F[i-][j]);
}
printf("%d",F[n][m]);
return ;
}
 

【USACO】电子游戏 有条件的背包的更多相关文章

  1. USACO Money Systems Dp 01背包

    一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V ...

  2. USACO Subset 整数划分01背包

    又是去理解了一次01背包. 这道题目的意思就是给你一个N (N < 40)表示有一个集合{1,2,3,... n} 你要将它划分成相等的两个子集合,求有几种划分方式 如果N是奇数,那么显然不能由 ...

  3. USACO 完结的一些感想

    其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...

  4. hdoj--2955--Robberies(背包好题)

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. dp式子100个……

    1.        资源问题1-----机器分配问题F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.        资源问题2------01背包问题F[I,j]:=max(f[i- ...

  6. dp方程

    1.        资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.        资源问题2 ------01背包问题   F[I,j]:=ma ...

  7. CSP2019: Lost and Found

    再不更就成鸽子了= = Day -INF to Day 0 不记得发生了什么 Day 1 今年HN用网上提交的方式收题?再也不怕因为交代码太晚增加省队名额了 开考看了一眼T1好像是模拟题,特地注意了\ ...

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

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

  9. (容量超大)or(容量及价值)超大背包问题 ( 折半枚举 || 改变 dp 意义 )

    题意 : 以下两个问题的物品都只能取有且只有一次 ① 给你 N 个物品,所有物品的价值总和不会超过 5000, 单个物品的价格就可达 10^10 ,背包容量为 B ② 给你 N (N ≤ 40 ) 个 ...

随机推荐

  1. 论C++的智能指针

    一.简介   参考这篇博客,并且根据<C++ Primer>中相关知识,我总结了C++关于智能指针方面的内容.   为了解决内存泄漏的问题,便出现了智能指针.STL提供的智能指针有:aut ...

  2. 20145237 《Java程序设计》第2周学习总结

    教材学习内容总结 本周我学习了java的基础语法.分为类型.变量与运算符,流程控制. 一.类型:1.Java可以区分为基本类型和类类型.类类型也称作参考类型.2.Java中基本类型主要是整数.字节.浮 ...

  3. 同一个页面同时拥有collectionView和navigationBar和tabBar时可能遇到的问题

    写一个页面的时候,遇到了页面加载时候collectionView的最下面少了49个像素的位置,切换去别的页面之后,再返回,又变回正常,多方求解无果后,发现原来是系统自带的适应功能导致的,加入以下代码即 ...

  4. NOIP2012 提高组 Day 2

    http://www.cogs.pro/cogs/page/page.php?aid=16 期望得分:100+100+0=0 实际得分:100+20+0=120 T2线段树标记下传出错 T1 同余方程 ...

  5. jupyter notebook下python2和python3共存(Ubuntu)

    提示NOTICE 时间:2018/04/06 主题:Ubuntu 下CAFFE框架 主角:Jupyter Notebook 简介: Jupyter Notebook(此前被称为 IPython not ...

  6. Python内置函数(3)——max

    英文文档: max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) Return the largest item in an i ...

  7. ArrayList、Vector、LinkedList、HashMap、HashTable的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,次数组元素大于实际存储的数据以便添加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数 ...

  8. Oracle 用户创建及权限设置

    1:创建临时表空间create temporary tablespace user_temp  tempfile 'D:\app\Administrator\oradata\ORACLE\xyrj_t ...

  9. java专业术语

    java的(PO,VO,TO,BO,DAO,POJO)解释 PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了.通常对应数据模型 ...

  10. python开发:python基本数据类型

    运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31- ...