AreYouBusy

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

Total Submission(s): 3434 Accepted Submission(s): 1334

Problem Description

Happy New Term!

As having become a junior, xiaoA recognizes that there is not much time for her to AC problems, because there are some other things for her to do, which makes her nearly mad.

What’s more, her boss tells her that for some sets of duties, she must choose at least one job to do, but for some sets of things, she can only choose at most one to do, which is meaningless to the boss. And for others, she can do of her will. We just define the things that she can choose as “jobs”. A job takes time , and gives xiaoA some points of happiness (which means that she is always willing to do the jobs).So can you choose the best sets of them to give her the maximum points of happiness and also to be a good junior(which means that she should follow the boss’s advice)?

Input

There are several test cases, each test case begins with two integers n and T (0<=n,T<=100) , n sets of jobs for you to choose and T minutes for her to do them. Follows are n sets of description, each of which starts with two integers m and s (0m<=100), there are m jobs in this set , and the set type is s, (0 stands for the sets that should choose at least 1 job to do, 1 for the sets that should choose at most 1 , and 2 for the one you can choose freely).then m pairs of integers ci,gi follows (0<=ci,gi<=100), means the ith job cost ci minutes to finish and gi points of happiness can be gained by finishing it. One job can be done only once.

Output

One line for each test case contains the maximum points of happiness we can choose from all jobs .if she can’t finish what her boss want, just output -1 .

Sample Input

3 3

2 1

2 5

3 8

2 0

1 0

2 1

3 2

4 3

2 1

1 1

3 4

2 1

2 5

3 8

2 0

1 1

2 8

3 2

4 4

2 1

1 1

1 1

1 0

2 1

5 3

2 0

1 0

2 1

2 0

2 2

1 1

2 0

3 2

2 1

2 1

1 5

2 8

3 2

3 8

4 9

5 10

Sample Output

5

13

-1

-1

Author

hphp

Source

2010 ACM-ICPC Multi-University Training Contest(10)——Host by HEU

Recommend

zhouzeyong

混合背包

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm> using namespace std; typedef long long LL; typedef pair<int,int>p; const int INF = 0x3f3f3f3f; int Dp[110][110];//记录执行i个任务是不同时间所获得的最大快乐 int n,T; int m,s; int w[110],v[110]; int main()
{
while(~scanf("%d %d",&n,&T))
{
memset(Dp,-1,sizeof(Dp)); memset(Dp[0],0,sizeof(Dp[0])); for(int i=1; i<=n; i++)
{
scanf("%d %d",&m,&s);
for(int j=1; j<=m; j++)
{
scanf("%d %d",&v[j],&w[j]);
}
if(s==0)
{
for(int j=1; j<=m; j++)
{ for(int k=T; k>=v[j]; k--)
{
if(Dp[i][k-v[j]]!=-1)//这一状态是建立放一件物品的基础上,01背包形式,可以选多个物品
{
Dp[i][k]=max(Dp[i][k],Dp[i][k-v[j]]+w[j]);
}
if(Dp[i-1][k-v[j]]!=-1)//由上一状态转化而来,保证至少有一个
{
Dp[i][k]=max(Dp[i][k],Dp[i-1][k-v[j]]+w[j]);
}
}
}
}
else if(s==1)
{
for(int k=0; k<=T; k++)//将上一状态转移到这个状态
{
Dp[i][k]=Dp[i-1][k];
}
for(int j=1; j<=m; j++)
{
for(int k=T; k>=v[j];k--)
{
if(Dp[i-1][k-v[j]]!=-1)//至多一个
{
Dp[i][k]=max(Dp[i][k],Dp[i-1][k-v[j]]+w[j]);
}
}
}
}
else if(s==2)
{
for(int k=0; k<=T; k++)
{
Dp[i][k]=Dp[i-1][k];
}
for(int j=1;j<=m;j++)//01背包
{
for(int k=T;k>=v[j];k--)
{
if(Dp[i][k-v[j]]!=-1)
{
Dp[i][k]=max(Dp[i][k],Dp[i][k-v[j]]+w[j]);
}
}
} }
}
printf("%d\n",Dp[n][T]);
}
return 0;
}

AreYouBusy的更多相关文章

  1. hdu 3535 AreYouBusy 分组背包

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

  2. HDU 3535 AreYouBusy 经典混合背包

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

  3. HDU 3535 AreYouBusy(混合背包)

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

  4. AreYouBusy HDU - 3535 (dp)

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

  5. HDU 3535 AreYouBusy (混合背包)

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

  6. UESTC 424 AreYouBusy --混合背包

    混合三种背包问题. 定义:dp[i][k]表示体积为k的时候,在前i堆里拿到的最大价值. 第一类,至少选一项,dp初值全赋为负无穷,这样才能保证不会出现都不选的情况.dp[i][k] = max(dp ...

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

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

  8. hdu 3535 AreYouBusy

    // 混合背包// xiaoA想尽量多花时间做ACM,但老板要求他在T时间内做完n堆工作,每个工作耗时ac[i][j],// 幸福感ag[i][j],每堆工作有m[i]个工作,每堆工作都有一个性质,/ ...

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

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

随机推荐

  1. keil 编译的一些错误

    以前使用的是MDK4.5 但是没有stm32F3的元器件,果断的使用了4.6版本了.但是编译之后出现这样错误:linking....\Obj\prj.axf: Warning: L6373W: lib ...

  2. SNMP ber 编码

    5.1 标识域(tag)的编码规则 标识域指明数据的类型,占用1个字节,常见的类型有:BOOL(0x01);INT(0x02);OCTSTR(0x04);NULL(0x05);OBJID(0x06); ...

  3. 夺命雷公狗ThinkPHP项目之----企业网站16之文章列表页的完善(关联查询)

    我们栏目的所属栏目不能总是以数字来显示吧??这样的话,估计老板会让您直接卷铺盖滚蛋噢,嘻嘻... 所以我们需要对她进行关联查询,控制器代码如下所示: public function lists(){ ...

  4. 【sinatra】安装测试

    $ gem install sinatra 测试: $ subl app.rb app.rb内容: require 'sinatra' get '/' do "Hello, World!&q ...

  5. C# PDFBox 解析PDF文件

    下载 PDFBox-0.7.3.zip PDFBox-0.7.3.dlllucene-demos-2.0.0.dlllucene-core-2.0.0.dllbcmail-jdk14-132.dllb ...

  6. Workspace Cloning / Sharing in Jenkins

    http://lwandersonmusings.blogspot.com/2011/06/workspace-cloning-sharing-in-hudson.html   What's insi ...

  7. 12个滑稽的C语言面试问答——《12个有趣的C语言问答》评析(5)

    前文链接:http://www.cnblogs.com/pmer/archive/2013/09/17/3327262.html A,局部变量的返回地址 Q:下面的代码有问题吗?如果有,如何修改? # ...

  8. MapReduce之Mapper类,Reducer类中的函数(转载)

    Mapper类4个函数的解析 Mapper有setup(),map(),cleanup()和run()四个方法.其中setup()一般是用来进行一些map()前的准备工作,map()则一般承担主要的处 ...

  9. 【转】The Attached Behavior Pattern

    原文:http://www.bjoernrochel.de/2009/08/19/the-attached-behavior-pattern/ The Attached Behavior Patter ...

  10. Windows 7 64位下使用ADB驱动

    早上在cmd输入adb devices想查询正在执行的虚拟器有多少个,但是执行结果出现 C:\Users\Administrator>adb deviceserror: C:\Users\Adm ...