HDU 3535 【背包】
题意:
给出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 ...
随机推荐
- (转)Lambda表达式详解
本文转载自:http://www.cnblogs.com/knowledgesea/p/3163725.html 前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸 ...
- 【NCDC数据】获取 hadoop权威指南3中的NCDC数据
vi getNcdcBigData.sh 内容如下: #!/bin/bash for i in {1901..2014} do cd /home/xxxx/hapood/ncdc wget --exe ...
- 【Struts2学习笔记-3】常量配置
Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...
- [linux basic基础]----套接字
套接字是一种通信机制,凭借这种机制client/server系统的开发者既可以在本地机器上进行,也可以跨网络进行. 1,服务器应用程序用系统调用socket来创建一个套接字,他是系统分配给服务器进程的 ...
- 我的Android最佳实践之—— Android启动画面的实现方法
本文实例讲述了Android启动画面的实现方法.分享给大家供大家参考.具体分析如下: 在应用程序中经常用到启动画面,会启动一个后台线程为主程序的运行准备资源.Android要实现启动画面可以这样做: ...
- (WPF) MVVM: DataGrid Binding
Binding到DataGrid的时候,需要用到ObservableCollection. public ObservableCollection<Customer> Customers ...
- c++学习-虚函数
#include <iostream> using namespace std; class common{ public: virtual void hello(){cout<&l ...
- Laravel5.0 CSRFチェックを無効化(修改后可以像5.1以上那样从CSRF保护中排除指定URL)
Laravel5では全てのPOSTに勝手にCSRFチェックが付いてきます.便利と言えば便利ですが.Laravel外からのPOSTを受け取りたいときなど大迷惑です. CSRFチェックを排除する方法が何故 ...
- TableViewCell的分割线显示不全解决方法
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath ...
- iOS 热点、通话时候TabView的Frame调整
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame{ ...