HDU - 3535:AreYouBusy (分组背包)
题意:给你n个工作集合,给你T的时间去做它们。给你m和s,说明这个工作集合有m件事可以做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多只能做一件,s=2说明这m件事你可以做也可以不做)。再给你ci和gi代表你做这件事要用ci的时间,能获得gi的快乐值。求在T的时间内你能获得的最大快乐值。
思路:分三类各自求即可。0的时候必须更新,1的时候最多更新一次,2的时候正常01背包。
#include<bits/stdc++.h>
#define s first
#define e second
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep2(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
using namespace std;
const int maxn=;
const int inf=1e9;
int dp[maxn],tmp[maxn],c[maxn],g[maxn],T,M;
void solve0() //at least
{
rep(i,,T) tmp[i]=-inf;
rep(i,,M)
rep2(j,T,c[i]){
tmp[j]=max(tmp[j],max(dp[j-c[i]]+g[i],tmp[j-c[i]]+g[i]));
}
rep(i,,T) dp[i]=tmp[i];
}
void solve1() //at most
{
rep(i,,T) tmp[i]=dp[i];
rep(i,,M)
rep2(j,T,c[i])
dp[j]=max(tmp[j-c[i]]+g[i],dp[j]);
}
void solve2() //free
{
rep(i,,M)
rep2(j,T,c[i])
dp[j]=max(dp[j-c[i]]+g[i],dp[j]);
}
int main()
{
int N,S,ans;
while(~scanf("%d%d",&N,&T)){
memset(dp,,sizeof(dp));
ans=-;
rep(i,,N){
scanf("%d%d",&M,&S);
rep(j,,M) scanf("%d%d",&c[j],&g[j]);
if(S==) solve0();
if(S==) solve1();
if(S==) solve2();
}
ans=max(ans,dp[T]);
printf("%d\n",ans);
}
return ;
}
HDU - 3535:AreYouBusy (分组背包)的更多相关文章
- hdu 3535 AreYouBusy 分组背包
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...
- [HDU 3535] AreYouBusy (动态规划 混合背包 值得做很多遍)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n个任务集合,需要在T个时间单位内完成.每个任务集合有属性,属性为0的代表至少要完成1个 ...
- HDU - 1712 (分组背包模板)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意:给你n个课程,每个课程有很多种学习方法,用的时间和取得的效果都不一样,现在你只有m天时间用来学 ...
- hdu 1712 (分组背包)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17676 这个问题让我对分组背包更清晰了一点,主要是这个问题: 使用一维数组的 ...
- HDU 3535 AreYouBusy (混合背包之分组背包)
题目链接 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there is n ...
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- HDU 3535 AreYouBusy 经典混合背包
AreYouBusy Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ...
- hdu 3535 AreYouBusy
// 混合背包// xiaoA想尽量多花时间做ACM,但老板要求他在T时间内做完n堆工作,每个工作耗时ac[i][j],// 幸福感ag[i][j],每堆工作有m[i]个工作,每堆工作都有一个性质,/ ...
- HDU 1712 分组背包
ACboy needs your help Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
随机推荐
- Toping Kagglers:Bestfitting,目前世界排名第一
Toping Kagglers:Bestfitting,目前世界排名第一 Kaggle团队 |2018年5月7日 我们在排行榜上排名第一 - 这是两年前令人惊讶地加入该平台的竞争对手.Shubin ...
- dubbo调用服务时,利用zookeeper实现本地动态负载均衡
利用了zookeeper的临时节点的特点,生产者将自己的服务信息注册到zookeeper当中,消费者去zookeeper当中取出服务信息的集合,本地实现负载均衡 public class TestCr ...
- poj1458公共子序列 C语言
/*Common SubsequenceTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 56416 Accepted: 23516D ...
- AtCoder-abc147 (题解)
A - Blackjack (水题) 题目链接 大致思路: 水题 B - Palindrome-philia (水题) 题目链接 大致思路: 由于整个串是回文串,只要判断前一半和后一半有多少个不同即可 ...
- delphi10.2断点调试dll
因为工作需要接触delphi10.2,需要调试dll,但是从网上查找的资料写的不是很清楚,我折腾了半天,我就动手写清楚操作步骤: 步骤1:用delphi10.2打开需要调试的dll,需要先打开,然后需 ...
- 【洛谷】P1308 统计单词数-全AC题解(易理解
弟弟的混乱代码(易理解 大概 思路: 循环b(被找的字符串),遇空格比较两空格间的长度是否与a(需要查找的字符)相等:不相等继续循环:相等比较内容是否相同(倒数比较,不一样直接退出 ,直到比较到第一个 ...
- Vue框架(二)——Vue指令(v-once指令、v-cloak指令、条件指令、v-pre指令、循环指令)、todolist案例、Vue实例(计算、监听)、组件、组件数据交互
Vue指令 1.v-once指令 单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) <!DOCTYPE html> <html lang=" ...
- emmet 配置文件
snippets.json(添加自己的或更新现有的片段) preferences.json(更改某些Emmet过滤器和操作的行为) SyntaxProfiles.json(定义生成的HTML / XM ...
- CSDN刷阅读数
今天我们来盘一下csdn,做一个小程序,为什么做这个呢?今天小编看着我的博客的阅读数,唉,惨不忍睹,没办法,只能想一些........呃呃呃呃,你懂的. 话不多说,分析一波csdn的阅读数,计数原理是 ...
- 正则 \num 如:\1, \2 匹配的结果
\num 匹配 num,其中 num 是一个正整数.对所获取的匹配的引用.例如,'(.)\1' 匹配两个连续的相同字符. 例子: 正则:/(a)(b)\1/.此表达式的意思大概是对第一个()匹配结果的 ...