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,任意)(背包混合)(好题)的更多相关文章

  1. HDU 2159 FATE(二维费用背包)

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

  2. HDU 1712 ACboy needs your help(包背包)

    HDU 1712 ACboy needs your help(包背包) pid=1712">http://acm.hdu.edu.cn/showproblem.php? pid=171 ...

  3. HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)

    HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...

  4. HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包)

    HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包) 题意分析 裸的完全背包问题 代码总览 #include <iostream> #include <cstdio> ...

  5. HDU 1257 最少拦截系统 最长递增子序列

    HDU 1257 最少拦截系统 最长递增子序列 题意 这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\).这里和最长公共子序列一样\((LCS)\)一样,子序列只要 ...

  6. 【python实例】要求输出字符串中最少一个最多八个的所有字符串组合(连续)

    """ 题目:字符串str="ABCDEFGHIJK",要求输出最少一个最多八个的所有组合(向后连续字母) 输出如下: A [0::] AB ABC ...

  7. HDU 3535 分组混合背包

    http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件 ...

  8. hdu 3535 AreYouBusy 分组背包

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

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

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

随机推荐

  1. 洛谷P5273 【模板】多项式幂函数 (加强版)

    题面 传送门 题解 这里最麻烦的问题就是它不保证\(A_0=1\) 如果\(A_0>1\),那么直接整个多项式乘上个\(A_0\)的逆元,最后输出答案的时候再把答案乘上\({A_0}^m\) 如 ...

  2. MySQL大数据高并发处理之-查询的优化

    http://www.php1.cn/Content/MySQL_DaShuJuGaoBingFaChuLiZhi_-_ChaXunDeYouHua.html

  3. mysql扩展库应用---在线词典程序范例

    1,在mysql中创建数据表words. create table words( id int primary key not null auto_increment, enword varchar( ...

  4. TCP协议中URG和PSH位

    URG(紧急位):设置为1时,首部中的紧急指针有效:为0时,紧急指针没有意义. PSH(推位):当设置为1时,要求把数据尽快的交给应用层,不做处理 通常的数据中都会带有PSH但URG只在紧急数据的时设 ...

  5. JMeter—监听器

    用来显示JMeter取样器的测试结果,能够以树.表.图形形式显示,也可以以文件方式保存. 一.设置默认配置 初始化配置文件设置: 监听器默认保存哪些数据域,可以在jmeter.properties(或 ...

  6. >>> 主页链接

    服 务 & SDK 网易云信|真正稳定的IM即时通讯云服务 微信小程序开发工具下载 百度LBS开放平台 ( 百度地图API示例) 微信JSSDK说明文档 (在线demo) 园 友 京东开涛 W ...

  7. Python+selenium 模拟wap端页面操作

    from selenium.webdriver.chrome.options import OptionsmobileEmulation = {'deviceName': 'iPhone X'}opt ...

  8. 2018 noip AFO? 祭

    \(\color{#00ffff}{DAY \ \ -1}\) 一下午,都在说注意事项,也没刷题 学姐说,考前远离rqj,会被%,掉rp(雾 晚上8点20,内心有一丝悸动... 于是去找教练谈话 在教 ...

  9. TX 下常用的查询指令

    查看Jetson TX2 L4T版本 head -n 1 /etc/nv_tegra_release 查看系统版本 cat /etc/lsb-release 查看系统l内核 uname -a 查看内存 ...

  10. for ++i i++

    study from: https://zhidao.baidu.com/question/339305815.html 处理方式的不同,速度上的微妙不同 有些高手能喜欢用++i,速度上快一点