// 混合背包
// 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的更多相关文章

  1. HDU 3535 AreYouBusy(混合背包)

    HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...

  2. hdu 3535 AreYouBusy 分组背包

    AreYouBusy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Probl ...

  3. [HDU 3535] AreYouBusy (动态规划 混合背包 值得做很多遍)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n个任务集合,需要在T个时间单位内完成.每个任务集合有属性,属性为0的代表至少要完成1个 ...

  4. HDU 3535 AreYouBusy 经典混合背包

    AreYouBusy Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Su ...

  5. HDU 3535 AreYouBusy (混合背包)

    题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...

  6. HDU 3535 AreYouBusy (混合背包之分组背包)

    题目链接 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there is n ...

  7. AreYouBusy HDU - 3535 (dp)

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

  8. HDU - 3535:AreYouBusy (分组背包)

    题意:给你n个工作集合,给你T的时间去做它们.给你m和s,说明这个工作集合有m件事可以做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多只能做一件,s ...

  9. HDU 3535 分组混合背包

    http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...

随机推荐

  1. uva 1423 拓扑排序

    刘书上例题  拓扑排序 #include <cstdio> #include <cstdlib> #include <cmath> #include <map ...

  2. lintcode: 翻转链表

    题目: 翻转链表 翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑战 在原地一次翻转完成 解题: 递归还 ...

  3. 毕向东JAVA视频讲解(四五课)

    内存的划分: 1,寄存器. 2,本地方法区. 3,方法区. 4,栈内存. 存储的都是局部变量. 而且变量所属的作用域一旦结束,该变量就自动释放. 5,堆内存. 存储是数组和对象(其实数组就是对象) 凡 ...

  4. 【Linux高频命令专题(4)】sed

    简述 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-ne ...

  5. eclipse中(装了插件m2eclipse后的)导入maven工程显示"感叹号"

      有时候导入一些开源工程(maven结构的),在eclipse中(装了插件m2eclipse后的)该工程前面会有一个小的红色感叹号,但点开工程后没有发现有打小红叉的内容,这种情况其实大部分是jar包 ...

  6. 2014--9=17 软工二班 MyEclipse blue==修改浏览器语言

  7. Lambda 表达式型的排序法

    int[] arry = {3,9,5,7,64,51,35,94 }; foreach (int i in arry.OrderBy(i => i)) Console.WriteLine(i) ...

  8. !!流行的php面试题及答案

    分类: 1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 答:echo $_SERVER['PHP_SELF']; ...

  9. QTP数据驱动之读取Excel数据

    这个代码的原理是把Excel的数据当做数据库里的数据一样处理,可以对Excel用select来检索需要的数据,然后把数据以键值对的形式保存到oDict里,方便在用例层来调用 Class oDataDi ...

  10. HDFS 小文件处理——应用程序实现

    在真实环境中,处理日志的时候,会有很多小的碎文件,但是文件总量又是很大.普通的应用程序用来处理已经很麻烦了,或者说处理不了,这个时候需要对小文件进行一些特殊的处理——合并. 在这通过编写java应用程 ...