hdu 3535 AreYouBusy
// 混合背包
// xiaoA想尽量多花时间做ACM,但老板要求他在T时间内做完n堆工作,每个工作耗时ac[i][j],
// 幸福感ag[i][j],每堆工作有m[i]个工作,每堆工作都有一个性质,
// 0表示至少要做里面的1个工作,
// 1表示最多做里面的1个工作,
// 2表示随意,做或不做都行。最后问在符合老板要求的情况下的最大幸福感,怎么都不符合要求就输出-1. // 0 可以看 hdu 3033 I love sneakers!
// 1,2 情况就是普通背包了 #include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MOD 1000000007
#define maxn 110
int dp[maxn],dp_num[maxn],dpy[maxn];
int ac[maxn][maxn],ag[maxn][maxn];
int zero[maxn],one[maxn],two[maxn];
int main()
{
int n,T;
int m[maxn],s;
int num0,num1,num2;
int i,j,k;
while(scanf("%d %d",&n,&T)!=EOF){
num0=num1=num2=;
for(i=;i<=n;i++){
scanf("%d %d",&m[i],&s);
switch(s)
{
case :zero[num0++]=i;break;
case :one[num1++]=i;break;
case :two[num2++]=i;break;
}
for(j=;j<=m[i];j++)
scanf("%d %d",&ac[i][j],&ag[i][j]);
}
int num;
memset(dp,,sizeof(dp));
memset(dp_num,,sizeof(dp_num));
memset(dpy,,sizeof(dpy));
for(num=;num<num0;num++)
{
i=zero[num];
for(j=;j<=m[i];j++){
for(k=T;k>=ac[i][j];k--){
if(dpy[k]<dp[k-ac[i][j]]+ag[i][j]&&dp_num[k-ac[i][j]]>=num){
dpy[k]=dp[k-ac[i][j]]+ag[i][j];
dp_num[k]=num+;
} else if(dp_num[k]==num&&dp_num[k-ac[i][j]]==num){
dpy[k]=dp[k-ac[i][j]]+ag[i][j];
dp_num[k]=num+;
}
}
for(k=;k<=T;k++)
if(dpy[k]>dp[k])
dp[k]=dpy[k];
}
for(j=;j<=T;j++)
dp[j]=dpy[j];
}
num=;
for(j=;j<=T;j++)
if(dp_num[j]!=num0)
dpy[j]=dp[j]=-,num++;
// else
// printf("\n%d %d ]",j,dp[j]); if(num==T+){printf("-1\n");continue;}//
for(num=;num<num1;num++)
{
i=one[num];
for(j=;j<=m[i];j++)
for(k=T;k>=ac[i][j];k--)
if(dp[k-ac[i][j]]>-)
dpy[k]=max(dpy[k],dp[k-ac[i][j]]+ag[i][j]);
for(j=;j<=T;j++)
dp[j]=dpy[j];
}
// for(i=0;i<=T;i++) printf("\n %d %d ]",i,dpy[i]);
for(num=;num<num2;num++)
{
i=two[num];
for(j=;j<=m[i];j++)
for(k=T;k>=ac[i][j];k--)
if(dp[k-ac[i][j]]>-)
dp[k]=max(dp[k],dp[k-ac[i][j]]+ag[i][j]);
}
printf("%d\n",dp[T]);
} return ;
}
hdu 3535 AreYouBusy的更多相关文章
- HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...
- hdu 3535 AreYouBusy 分组背包
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- [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 (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
- HDU 3535 AreYouBusy (混合背包之分组背包)
题目链接 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there is n ...
- AreYouBusy HDU - 3535 (dp)
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU - 3535:AreYouBusy (分组背包)
题意:给你n个工作集合,给你T的时间去做它们.给你m和s,说明这个工作集合有m件事可以做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多只能做一件,s ...
- HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
随机推荐
- error C2061: syntax error : identifier '__RPC__out_xcount_part'
朋友遇到的 把dx, windows sdk ,vs2010照着成功人士的配置好 应该就可以了
- Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法
Linux下Rsync+inotify-tools实现数据实时同步中有一个重要的配置就是设置Inotify的max_user_watches值,如果不设置,当遇到大量文件的时候就会出现出错的情况. 一 ...
- ECMALL目录结构设置与数据库表
[Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...
- POJ 1775
#include <iostream> using namespace std; ,,,,,,,,,}; bool boo; void DFS(int time,int sum); int ...
- 桥接模式(Bridge Pattern)
1,定义 桥接模式(Bridge Pattern),也称为桥梁模式,其用意是将抽象化与实现化脱耦,使得两者可以独立的变化,它可以使软件系统沿着多个方向进行变化,而又不引入额外的复杂 ...
- Linux下使用mail命令发送邮件
因为需要经常备份网站的数据,所以了解并学习了下linux下如何通过shell来发送邮件,这里以CentOS为例,使用mail命令来进行外部邮件的发送.mail命令的语法如下: Usage: mail ...
- Android:文件夹显示红色叹号
有感叹号,说明有的文件损坏或丢失了 解决方法: 右击工程,Build Path..->Configure Build Path...->Java Build Path 可以看到引用的jar ...
- ASP.NET MVC 4 (一)路径映射
原文:ASP.NET MVC 4 (一)路径映射 正如ASP.NET MVC名字所揭示的一样,是以模型-视图-控制设计模式构建在ASP.NET基础之上的WEB应用程序,我们需要创建相应的程序类来协调处 ...
- 第二十二章 CLR寄宿和AppDomain
1. 概念解析 CLR Hosting(CLR 宿主):初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只不过由于PE ...
- Android AIDL-跨进程
Android在设计理念上强调组件化,组件之间的依赖性很小.我们往往发一个Intent请求就可以启动另一个应用的Activity,或者一个你不知道在哪个进程的Service,或者可以注册一个广播,只要 ...