HDU3535AreYouBusy(分组背包)
http://acm.hdu.edu.cn/showproblem.php?pid=3535
分组背包,每一组加了以下三个限制
0 stands for the sets that should choose at least 1 job to do,
1 for the sets that should choose at most 1 ,
2 for the one you can choose freely
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define lson k<<1, L, mid
#define rson k<<1|1, mid+1, R typedef long long LL;
const double eps = 1e-;
const int MAXN = ;
const int MAXM = ; int n, T, m, s;
int DP[][];
int cost[], val[]; int main()
{
while(~scanf("%d%d", &n, &T))
{
for(int i=;i<=T;i++) DP[][i]=;
for(int i=;i<=n;i++)
{
scanf("%d%d", &m, &s);
for(int j=;j<m;j++) scanf("%d%d", &cost[j], &val[j]);
if(s==) {
for(int k=;k<=T;k++) DP[i][k] = -INF;// 这样确保最少放一个物品
for(int j=;j<m;j++)
for(int k=T;k>=cost[j];k--) {
//** 如果是第一次选,则一定能加入数组中
//** 如果不是第一次选,则当做普通01背包处理
DP[i][k] = max(DP[i][k], max(DP[i][k-cost[j]]+val[j], DP[i-][k-cost[j]]+val[j]));
}
}
else if(s==) {
// 为了保证全局最优解,初始化为上一次结果
for(int k=;k<=T;k++) DP[i][k] = DP[i-][k];
for(int j=;j<m;j++)
for(int k=T;k>=cost[j];k--) {
DP[i][k] = max(DP[i][k], DP[i-][k-cost[j]]+val[j]);
}
}
else if(s==) {
for(int j=;j<=T;j++)DP[i][j] = DP[i-][j];
for(int j=;j<m;j++)
for(int k=T;k>=cost[j];k--) {
DP[i][k] =max(DP[i][k], max(DP[i-][k-cost[j]]+val[j], DP[i][k-cost[j]]+val[j]));
}
}
}
printf("%d\n", max(DP[n][T], -));
}
return ;
}
HDU3535AreYouBusy(分组背包)的更多相关文章
- HDU3535AreYouBusy[混合背包 分组背包]
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1712 ACboy needs your help(分组背包)
题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部 ...
- Codeforces Round #383 (Div. 2) D 分组背包
给出一群女孩的重量和颜值 和她们的朋友关系 现在有一个舞台 ab是朋友 bc是朋友 ac就是朋友 给出最大承重 可以邀请这些女孩来玩 对于每一个朋友团体 全邀请or邀请一个or不邀请 问能邀请的女孩的 ...
- HDU 3033 分组背包变形(每种至少一个)
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 1712 分组背包
ACboy needs your help Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)
D. Arpa's weak amphitheater and Mehrdad's valuable Hoses Problem Description: Mehrdad wants to invit ...
- POJ1837 Balance[分组背包]
Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13717 Accepted: 8616 Descript ...
- Codevs1378选课[树形DP|两种做法(多叉转二叉|树形DP+分组背包)---(▼皿▼#)----^___^]
题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...
- hdu1712 分组背包
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1712 题意:有n门课程,和m天时间,完成mp[i][j]得到的价值为第i行j列的数字,求最 ...
随机推荐
- C语言之复杂指针详解
在<C陷阱与缺陷>第二章第一节中有这样一个声明: (*(void(*)())0)(): 看到这样的表达式估计让不少人都“不寒而栗”了吧,其实虽然看起来复杂,但是构造这类表达式其实只有一条简 ...
- [xUnix 开发环境--01] MAMP mac os 10.10 配置经历、要点——01. phpmyadmin连不上
Mac OS 10.10已经自带了apache2和php(php的路径我至今还没不知道,太懒没去找) 用brew安装mysql, 在官网上下载了phpmyadmin,按官方方式配置完后,登录不上,也不 ...
- 【C#学习笔记】浏览目录得到路径
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- dede调用第一张大图,非缩略图
1.找到include/extend.func.php加入现在函数 function firstimg($str_pic) { $str_sub=substr($str_pic,0,-7)." ...
- taobao
taobao */--> UP | HOME taobao Table of Contents 1 taobao 1 taobao 欣然小铺 Date: 2013-09-25 Wen Autho ...
- Hadoop 学习总结之一:HDFS简介
一.HDFS的基本概念 1.1.数据块(block) HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块. 和普通文件系统相同的是,HDFS ...
- oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
提示: IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件 IMP-00000: 未成功终止导入 解决方法: 用户system用户登录然后授权 grant dba to hszx
- iostat的深入理解
问题背景 iostat -xdm 1 通常用来查看机器磁盘IO的性能. 我们一般会有个经验值,比如,ioutil要小于80%, svctm要小于2ms. 前几天碰到一个奇怪的现象:有一台SSD机器,磁 ...
- 【Unity入门】编辑器常用视图介绍
版权声明:本文为博主原创文章,转载请注明出处. 打开Unity编辑器的主窗口,在窗口的右上角可以看到有个“Layout”按钮.这是用来对Unity编辑器主窗口上面的各个窗口面板进行布局的.通常情况下我 ...
- Python 时间整理
在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: ...