题意:
给出n组数据,每组数据有一个类型。
0代表至少选择一个,1代表至多选择一个,2代表任意选择。
给出背包容量。
如果背包不能满足最基本的要求输出-1。
思路:
背包问题变相考察~
当0的时候初始化为-INF,然后就能保证至少选择一个。
当1或2的时候初始化上一层的值,然后1和2稍微有点区别,1只能从上一层得到下一层,2可以用本层更新。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int c[],w[];
int dp[][];
int main()
{
int n,t;
while(scanf("%d%d",&n,&t)!=EOF)
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
int m,s;
scanf("%d%d",&m,&s);
for(int j=;j<=m;j++)
{
scanf("%d%d",&w[j],&c[j]);
}
if(s==)
{
for(int j=;j<=t;j++)
{
dp[i][j]=-;
}
for(int j=;j<=m;j++)
{
for(int k=t;k>=w[j];k--)
{
//dp[i][k]=max(dp[i][k],dp[i-1][k-w[j]]+c[j]);
//dp[i][k]=max(dp[i][k],dp[i][k-w[j]]+c[j]);
dp[i][k]=max(dp[i][k],max(dp[i-][k-w[j]]+c[j],dp[i][k-w[j]]+c[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>=w[j];k--)
{
dp[i][k]=max(dp[i][k],dp[i-][k-w[j]]+c[j]);
}
}
}
else
{
for(int j=;j<=t;j++)
{
dp[i][j]=dp[i-][j];
}
for(int j=;j<=m;j++)
{
for(int k=t;k>=w[j];k--)
{
dp[i][k]=max(dp[i][k],dp[i][k-w[j]]+c[j]);
}
}
}
}
if(dp[n][t]<)
printf("-1\n");
else
printf("%d\n",dp[n][t]);
}
}
HDU 3535 【背包】的更多相关文章
-
hdu 3535 背包综合题
/* 有n组背包,每组都有限制 0.至少选一项 1.最多选一项 2.任意选 */ #include <iostream> #include <cstdio> #include ...
-
HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
-
[HDU 3535] AreYouBusy (动态规划 混合背包 值得做很多遍)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n个任务集合,需要在T个时间单位内完成.每个任务集合有属性,属性为0的代表至少要完成1个 ...
-
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 (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
-
HDU 3535 AreYouBusy 经典混合背包
AreYouBusy Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ...
-
HDU - 3535:AreYouBusy (分组背包)
题意:给你n个工作集合,给你T的时间去做它们.给你m和s,说明这个工作集合有m件事可以做,它们是s类的工作集合(s=0,1,2,s=0说明这m件事中最少得做一件,s=1说明这m件事中最多只能做一件,s ...
-
HDU 3535 AreYouBusy (混合背包之分组背包)
题目链接 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there is n ...
随机推荐
-
0021 Java学习笔记-面向对象-包、构造器
封装 面向对象的三大特征: 封装 继承 多态 封装: 将对象的状态信息隐藏,不允许外部程序直接访问 通过该类提供的方法来访问和操作 有啥用: 隐藏类的实现细节 在方法中加入控制逻辑,限制对成员变量的不 ...
-
js表单元素checked、radio被选中的几种方式-遁地龙卷风
0.环境 <input type="checkbox" value="lol"/>lol var lol = document.getElemen ...
-
C#的扩展方法
using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...
-
PHP、Java输出json格式数据
PHP 输出json. $result = mysql_query($sql); //查询结果 $users=array(); $i=0; while($row=mysql_fetch_array ...
-
MySQL查询执行过程
MySQL查询执行路径 1. 客户端发送一条查询给服务器: 2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果.否则进入下一阶段: 3. 服务器端进行SQL解析.预处理,再由优 ...
-
hdu 4778
知道是状态压缩,但是不会做: 看题解学的: dp[i]表示现在状态是i,先手-后手的分数. #include<cstdio> #include<cstring> #includ ...
-
gzip [选项] 压缩(解压缩)
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. 语法:gzip ...
-
android开发之this.finish()的使用
在一个Activity用完之后应该将之finish掉,但是,之前在学校里自己摸索着开发时并没有太注意这个问题,因为activity无论是否finish掉对功能的影响貌似都不是那么明显(这是读书时候的观 ...
-
[转]mysql如何利用Navicat 导出和导入数据库
MySql是我们经常用到的数据,无论是开发人员用来练习,还是小型私服游戏服务器,或者是个人软件使用,都十分方便.对于做一些个人辅助软件,选择mysql数据库是个明智的选择,有一个好的工具更是事半功倍, ...
-
Android——问题解决之adb not responding;adb不是内部或外部命令;path变量的默认值为多少
adb not responding 恩,这是出现的问题.我们开始来解决它吧! 出现这种问题大多是因为adb端口被占用导致这个问题,所以只要找到占用端口号程序,结束即可!就是这么简单(adb运行端口号 ...