HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包)
http://acm.hdu.edu.cn/showproblem.php?pid=3535
题意:
给你n个工作集合,给你T的时间去做它们。给你m和s。说明这个工作集合有m件事能够做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多仅仅能做一件,s=2说明这m件事你能够做也能够不做)。
再给你ci和gi代表你做这件事要用ci的时间,能获得gi的快乐值。
求在T的时间内你能获得的最大快乐值。
分析:
首先假设存在最优解, 我们能够互换不同工作集合的处理顺序, 依旧能得到最优解. 那么我们以下仅仅须要处理每一个单独的工作集合就可以.
令dp[i][j]==x表示处理完前i组工作集,所花时间<=j时的快乐值为x。
每得到一组工作就进行一次DP,所以dp[i]为第i组的结果。以下对三种情况进行讨论。
1. 该集合内至少要选1件工作时. 要保证至少选1个第i类工作, 能够从第i-1类的结果dp[i-1]来更新dp[i].也能够用 01背包的思想, 从本类的前一个工作更新后一个工作.
初始化:dp[i]全为负无穷.(即-INF)
状态转移方程为:
dp[i][k]=max{dp[i][k],dp[i-1][k-cost[j]]+val[k],dp[i][k-cost[j]]+val[j] }
2. 该集合内最多选1件工作时. 仅仅能从上一层的结果dp[i-1]来更新dp[i]了.(想想为什么)
初始化:dp[i]==dp[i-1].
状态转移方程为dp[i][k]=max{dp[i][k],dp[i-1][k-cost[j]]+val[k]}.
3. 该集合内工作能够随便选. 这就是1个普通的01背包问题了.
初始化:dp[i]==dp[i-1].
状态转移方程为:
dp[i][k]=max{dp[i][k],dp[i-1][k-cost[j]]+val[k],dp[i][k-cost[j]]+val[j] }
终于所求:dp[n][t]的值.
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100+5;
#define INF 1e8 int n;
int t;
int dp[maxn][maxn];
int cost[maxn];
int val[maxn]; int main()
{
while(scanf("%d%d",&n,&t)==2)
{
memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++)
{
int m,s;
scanf("%d%d",&m,&s);
for(int k=1;k<=m;k++)
scanf("%d%d",&cost[k],&val[k]); if(s==0)//至少选1个的01背包问题
{
for(int j=0;j<=t;j++) dp[i][j]=-INF; for(int k=1;k<=m;k++)
for(int j=t;j>=cost[k];j--)
{
dp[i][j] = max( dp[i][j] , dp[i][j-cost[k]]+val[k] ); //1
dp[i][j] = max( dp[i][j] , dp[i-1][j-cost[k]]+val[k] );//2
//上面两句顺序互换就会出错!为什么?
}
}
else if(s==1)//至多选1个的背包问题
{
for(int j=0;j<=t;j++) dp[i][j]=dp[i-1][j]; for(int k=1;k<=m;k++)
for(int j=t;j>=cost[k];j--)//j能够正序或逆序枚举
dp[i][j] = max( dp[i][j] , dp[i-1][j-cost[k]]+val[k] );
}
else if(s==2)//随便选的01背包问题
{
for(int j=0;j<=t;j++) dp[i][j]=dp[i-1][j]; for(int k=1;k<=m;k++)
for(int j=t;j>=cost[k];j--)//j仅仅能逆序枚举
dp[i][j] = max( dp[i][j] , dp[i][j-cost[k]]+val[k] );
}
} int ans = max(dp[n][t],-1);
printf("%d\n",ans);
}
return 0;
}
HDU 3535 AreYouBusy(混合背包)的更多相关文章
- HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
- hdu 3535 AreYouBusy 分组背包
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- hdu 3535 AreYouBusy
// 混合背包// xiaoA想尽量多花时间做ACM,但老板要求他在T时间内做完n堆工作,每个工作耗时ac[i][j],// 幸福感ag[i][j],每堆工作有m[i]个工作,每堆工作都有一个性质,/ ...
- HDU3535 AreYouBusy 混合背包
题目大意 给出几组物品的体积和价值,每组分为三种:0.组内物品至少选一个:1.组内物品最多选一个:2.组内物品任意选.给出背包容量,求所能得到的最大价值. 注意 仔细审题,把样例好好看完了再答题,否则 ...
- [HDU 3535] AreYouBusy (动态规划 混合背包 值得做很多遍)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n个任务集合,需要在T个时间单位内完成.每个任务集合有属性,属性为0的代表至少要完成1个 ...
- HDU 3535 AreYouBusy 经典混合背包
AreYouBusy Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ...
- HDU 3535 AreYouBusy (混合背包之分组背包)
题目链接 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there is n ...
- UESTC 424 AreYouBusy --混合背包
混合三种背包问题. 定义:dp[i][k]表示体积为k的时候,在前i堆里拿到的最大价值. 第一类,至少选一项,dp初值全赋为负无穷,这样才能保证不会出现都不选的情况.dp[i][k] = max(dp ...
随机推荐
- Opencv学习笔记4:Opencv处理调整图片亮度和对比度
一.理论基础 在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a> ...
- nginx安装第三方模块
原已经安装好的nginx,现在需要添加一个未被编译安装的模块 举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存) nginx的模块是需要重新编译nginx,而不是像a ...
- 【漏洞预警】CVE-2017-8464 震网三代漏洞复现
早在6月13日,微软发布补丁修复编号为CVE-2017-8464的漏洞,本地用户或远程攻击者可以利用该漏洞生成特制的快捷方式,并通过可移动设备或者远程共享的方式导致远程代码执行,追溯到以前,NSA就承 ...
- 【Codeforces528D】Fuzzy Search FFT
D. Fuzzy Search time limit per test:3 seconds memory limit per test:256 megabytes input:standard inp ...
- poj 1825 Ants 水题
Ants Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10722 Accepted: 4752 Description ...
- wikioi 1576 最长严格上升子序列
简单的最长严格上升子序列的题 dp[i]表示到a[i]这个数为最后的时候最大的长度是多少 然后就差不多了吧~ #include <cstdio> #include <cmath> ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- echarts3相关的各种定制化
在我刚把项目中的echarts从2.x版本升级到echarts3.x,折腾老久,终于交付了项目的时候,echarts4又出来了,先不管,还是把我echarts3.x遇到的和formatter相关的问题 ...
- Django1.7如何配置静态资源访问
Django是非常轻量级的Web框架,今天散仙来看下如何在Django中配置静态的资源访问路径,一个中等规模的网站,可能就会有很多静态的资源需要访问,无论是html,txt,还是压缩包,有时候访问这些 ...
- dos命令行实践
本篇体验使用dos命令行窗口实现各种操作. □ 打开dos命令行窗口 →点击电脑左下角"开始"按钮→点击"运行"→输入"cmd",按回车,来 ...