hdu 3535 (最少1,最多1,任意)(背包混合)(好题)
http://blog.csdn.net/yan_____/article/details/8530833
这个问题一开始我用滚动,没有做出来,可能要需要先预处理排序才行,后来看了别人的方法,开始用二维
首先是初始化:
mem(dp,-1);
mem(dp[0],0);
0的时候,最少一次:
除0外其他都为-1
因为没有继承上一层的状态,所以这一层滚动时,所以这一层不能达到的状态还是-1,
后面的层数都会继承这一层的状态,一定会选上一个,>=1
对于已存在的状态,dp[i][j] = max(dp[i][j],dp[i-1][j - c[i] ] + w[i]) 上一层+这一层
对于当前滚动状态,dp[i][j] = max(dp[i][j],dp[i][j - c[i] ] + w[i] ) 这一层之间的累加
1的时候,最多一次:
继承上一层状态,只有当上个值存在时才更新
dp[i][j] = max(dp[i][j],dp[i-1][j - c[i] ] + w[i] )
因为判断的是上一层的状态,所以这一层的之间不会叠加,<=1
2的时候:
继承上一层状态,只有当上个值存在时才更新
dp[i][j] = max(dp[i][j],dp[i][j - c[i] ] + w[i] )
判断的是这一层的状态,可以任意叠加
#include<stdio.h>
#include<string.h>
#define size 110
int dp[size][size];
int c[size];
int w[size];
int n,t,m,s;
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int i,j,k;
while(scanf("%d %d",&n,&t)!=EOF)
{
memset(dp,-,sizeof(dp));
memset(dp[],,sizeof(dp[]));
for(i=;i<=n;i++)
{
scanf("%d %d",&m,&s);
for(j=;j<m;j++)
{
scanf("%d %d",&c[j],&w[j]);
}
if(s==)
{
for(k=;k<m;k++)
{
for(j=t;j>=c[k];j--)
{
if(dp[i][j-c[k]]!=-)
{
dp[i][j]=max(dp[i][j],dp[i][j-c[k]]+w[k]);
printf("i%d j%d k%d dp%d\n",i,j,k,dp[i][j]);
}
if(dp[i-][j-c[k]]!=-)
{
dp[i][j]=max(dp[i][j],dp[i-][j-c[k]]+w[k]);
printf("i%d j%d k%d dp%d\n",i,j,k,dp[i][j]);
}
}
}
}
else if(s==)
{
for(j=;j<=t;j++)
dp[i][j]=dp[i-][j];
for(k=;k<m;k++)
{
for(j=t;j>=c[k];j--)
{
if(dp[i-][j-c[k]]!=-)
{
dp[i][j]=max(dp[i][j],dp[i-][j-c[k]]+w[k]);
printf("i%d j%d k%d dp%d\n",i,j,k,dp[i][j]);
}
}
}
}
else
{
for(j=;j<=t;j++)
dp[i][j]=dp[i-][j];
for(k=;k<m;k++)
{
for(j=t;j>=c[k];j--)
{
if(dp[i][j-c[k]]!=-)
{
dp[i][j]=max(dp[i][j],dp[i][j-c[k]]+w[k]);
printf("i%d j%d k%d dp%d\n",i,j,k,dp[i][j]);
}
}
}
}
}
printf("%d\n",dp[n][t]);
}
return ;
}
hdu 3535 (最少1,最多1,任意)(背包混合)(好题)的更多相关文章
- HDU 2159 FATE(二维费用背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1712 ACboy needs your help(包背包)
HDU 1712 ACboy needs your help(包背包) pid=1712">http://acm.hdu.edu.cn/showproblem.php? pid=171 ...
- HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)
HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...
- HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包)
HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包) 题意分析 裸的完全背包问题 代码总览 #include <iostream> #include <cstdio> ...
- HDU 1257 最少拦截系统 最长递增子序列
HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...
- 【python实例】要求输出字符串中最少一个最多八个的所有字符串组合(连续)
""" 题目:字符串str="ABCDEFGHIJK",要求输出最少一个最多八个的所有组合(向后连续字母) 输出如下: A [0::] AB ABC ...
- HDU 3535 分组混合背包
http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...
- hdu 3535 AreYouBusy 分组背包
AreYouBusy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- [HDU 3535] AreYouBusy (动态规划 混合背包 值得做很多遍)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n个任务集合,需要在T个时间单位内完成.每个任务集合有属性,属性为0的代表至少要完成1个 ...
随机推荐
- [Objective-C语言教程]数据类型(5)
在Objective-C编程语言中,数据类型是指用于声明不同类型的变量或函数的扩展系统. 变量的类型决定了它在存储中占用的空间大小以及如何解释存储的位模式. Objective-C中的类型可分为以下几 ...
- C#-★★函数★★
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序来实现模块的功能.在C#语言中,子程序的作用是由一个主函数和若干个函数构成.由主函数 ...
- python在一堆目录中寻找json文件
在一个目录下,有好几层目录,里面零零散散存放着几个json文件,我要做的是用python脚本把它们都找出来,一开始就一层一层地找,用os.listdir加上for循环,根据目录树的深度确定for循环的 ...
- 高阶篇:4.1.2.3)产品零件级别的QFDII
本章目的:介绍产品零件级别的QFDII编写方法. 1.前言 这章接前面部件级别的QFDII. 产品零件级别的QFDII,其实就是将零件QFDII所得到的设计要求,进一步分配零件的特征(Part Cha ...
- shevle模块
什么是shevle模块 该模块用于序列化python中的数据,但是序列化已经有pickle了为什么出现了shevle? 因为shevle更加简单,封装了文件的读写操作.load和dump操作, 只有一 ...
- docker jenkins使用(二)
jenkins的安装很简单,但是jenkins的初次使用却很头疼.对于小白来说有点不太明白 背景: 开发更新app需要很多步骤,生成jar包.上传服务器.更新启动程序,如果有很多服务器,那么需要做好多 ...
- java se系列(十二)集合
1.集合 1.1.什么是集合 存储对象的容器,面向对象语言对事物的体现,都是以对象的形式来体现的,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式.集合的出现就是为了持有对象.集 ...
- C#几种常用的加密方式
一.AES加密算法 AES算法基于排列和置换运算.排列是对数据重新进行安排,置换是将一个数据单元替换为另一个.AES 使用几种不同的方法来执行排列和置换运算. AES是一个迭代的.对称密钥分 ...
- 配置idea解决乱码
在项目开发过程中,我们一般希望在修改完代码之后不重启项目即可提现出修改的结果,那么热部署项目就显得十分必要了.在idea中将项目热部署至tomcat中的方法如下: 首先打开tomcat配置界面,在se ...
- IDEA里如何安装Python插件打造开发环境(图文详解)
前言 python是一种功能强大和适用面很广的开发语言,在大数据应用和机器学习日益流行的年代,python凭借其简洁.易用和可扩展性获得很多用户的支持,近年来使用率高速增长.python环境下,集成了 ...