混合背包 hdu5410 CRB and His Birthday
传送门:点击打开链接
题意:你有M块钱,如今有N件商品
第i件商品要Wi块,假设你购买x个这种商品。你将得到Ai*x+Bi个糖果
问能得到的最多的糖果数
思路:很好的一道01背包和全然背包结合的题目
首先,对于第i件商品,假设仅仅买1个,得到的价值是Ai+Bi
假设在买1个的基础上再买。得到的价值就是Ai
也就是说,除了第一次是Ai+Bi。以后购买都是Ai
那么,我们是否能将i商品拆分成两种商品,当中两种商品的代价都是Wi,
第一种的价值是Ai+Bi,可是仅仅同意买一次
另外一种的价值是Ai。能够无限次购买
接下来我们来讨论这样拆的正确性
理论上来讲,买另外一种之前。必需要买第一种
可是对于这道题,由于Ai+Bi>=Ai是必定的,由于Bi肯定是非负
所以对于代价同样。价值大的肯定会被先考虑
换句话来说,假设已经開始考虑另外一种商品了。那么第一种商品就肯定已经被加入到背包里了~
所以。这题我们把n件商品拆分成2*n件商品。对于第一种商品做01背包,对于另外一种商品做全然背包,这样就把题目转换成了很熟悉的题目。也就能顺利AC了
#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define FIN freopen("input.txt","r",stdin) using namespace std;
typedef long long LL;
typedef pair<int, int> PII; const int MX = 2e4 + 5; int dp[MX];
int A[MX], B[MX], rear; int main() {
int T, V, n; //FIN;
scanf("%d", &T);
while(T--) {
memset(dp, 0, sizeof(dp)); scanf("%d%d", &V, &n);
for(int i = 1; i <= n; i++) {
int w, a, b;
scanf("%d%d%d", &w, &a, &b); A[i] = w; B[i] = a + b;
A[i + n] = w; B[i + n] = a;
} for(int i = 1; i <= n; i++) {
for(int j = V; j >= A[i]; j--) {
dp[j] = max(dp[j], dp[j - A[i]] + B[i]);
}
}
for(int i = 1 + n; i <= 2 * n; i++) {
for(int j = A[i]; j <= V; j++) {
dp[j] = max(dp[j], dp[j - A[i]] + B[i]);
}
} printf("%d\n", dp[V]);
}
return 0;
}
混合背包 hdu5410 CRB and His Birthday的更多相关文章
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
- Codevs 3269 混合背包(二进制优化)
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为V ...
- HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...
- codevs 3269 混合背包(复习混合背包)
传送门 [题目大意]给出物品的数量.-1为无限个. [思路]混合背包.... [code] #include<iostream> #include<cstdio> #inclu ...
- HDU3535 AreYouBusy 混合背包
题目大意 给出几组物品的体积和价值,每组分为三种:0.组内物品至少选一个:1.组内物品最多选一个:2.组内物品任意选.给出背包容量,求所能得到的最大价值. 注意 仔细审题,把样例好好看完了再答题,否则 ...
- [codevs3269]混合背包
题目大意:一道混合背包模板. 解题思路:分三种情况讨论,01和完全没什么问题,多重背包需要把物品分成$\log W[i]$件,然后01即可,分成W[i]件01会TLE. 读优大法好! C++ Code ...
- CODE[VS] 3269 混合背包
3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 背包体积为V ,给出N ...
- POJ 1742 (单调队列优化多重背包+混合背包)
(点击此处查看原题) 题意分析 给你n种不同价值的硬币,价值为val[1],val[2]...val[n],每种价值的硬币有num[1],num[2]...num[n]个,问使用这n种硬币可以凑齐[1 ...
随机推荐
- springMVC 引入静态资源Js的方式
前两天项目出现了Js无法引入的情况,本篇博客先总结分析+批判自己犯的低级错,再说说几种访问静态资源的方式! 首先,由于在web.xml里面的servlet拦截匹配为<url-pattern> ...
- JSP内置对象的cookie和session实现简单登录界面
创建一个index.jsp页面 <%@ page language="java" contentType="text/html; charset=utf-8&quo ...
- iOS开发中六种手势识别
iOS开发中手势识别有六种: 轻击手势(TapGestureRecognizer), 轻扫手势 (SwipeGestureRecognizer), 长按手势(LongPressGestureRecog ...
- Welcome-to-Swift-08枚举 (Enumerations)
枚举为一系相关联的值定义了一个公共的组类型.同时能够让你在编程的时候在类型安全的情况下去使用这些值. 如果你对C语言很熟悉,你肯定知道在C语言中枚举类型就是一系列具有被指定有关联名称的的整数值.但在S ...
- 【Luogu】P1486郁闷的出纳员(Splay)
题目链接 名副其实的调了一下午…… 每做一道题都是对我那不规范的Splay代码的刀刻斧凿一般的修正啊…… Splay.如果有一批员工不干了,那就找还能干的薪水最少的员工,把它splay到根,删除它的左 ...
- POJ——3264Balanced Lineup(RMQ模版水题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 44112 Accepted: 20713 ...
- HDU——1205吃糖果(鸽巢原理)
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...
- BZOJ-1036 [ZJOI2008]树的统计
树链剖分模版题. #include <cstdlib> #include <cstdio> #include <cstring> #include <algo ...
- hdu 4372 Count the Buildings 轮换斯特林数
题目大意 n栋楼有n个不同的高度 现在限制从前面看有F个点,后面看有B个点 分析 最高那栋楼哪都可以看到 剩下的可以最高那栋楼前面分出F-1个组 后面分出B-1个组 每个组的权值定义为组内最高楼的高度 ...
- 基于promise和script标签的jsonp
function Jsonp(url){ var url=url.indexOf('?')>-1?url+"&callback=callback":url+" ...