连续背包 (背包套背包)
连续背包(bag)
【问题描述】
从T组物品中选出一些物品,放入背包中,求剩余空间的最小值。
限制条件:从每组物品中挑选物品必须要选取连续的一段。就是说,如果这组物品共有n个: 物品1、物品2、物品3、…、物品n,那么只能选取物品i、物品i+1、…、物品j,其中1<=i<=j<=n,或者不选。
【输入】
第一行为两个用空格隔开的正整数v和T。表示背包的空间和物品的组数。
接下来有T行,每行先是一个正整数ni,表示这组物品有ni个,然后ni个正整数,表示每个物品的大小。
【输出】
仅一个数,表示剩余空间的最小值。
【输入输出样例】
bag.in
100 3
3 7 6 8
2 80 70
4 101 108 103150
bag.out
6
【输入输出样例解释】
第1组选6、8,第2组选80,第3组不选。
【限制】
60%的数据满足:1 <= ni <= 10
100%的数据满足:1 <= ni <= 100,1<=v<=5000,1<=T<=10
对每一段背包
再对各段背包
注意单步中Vmax=V[i-1]+sum[ni]
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<functional>
#include<algorithm>
using namespace std;
#define MAXNI (100+10)
#define MAXV (500000+10)
#define MAXN (10+10)
int T,n,v,sum[MAXNI]={0},a[MAXNI],A[MAXN][MAXV]={0};
bool f[MAXN][MAXV]={0};
int main()
{freopen("bag.in","r",stdin);freopen("bag.out","w",stdout);scanf("%d%d",&v,&T);
// v=v*10;f[0][0]=1;for (int i=1;i<=T;i++){scanf("%d",&n);sum[0]=0;for (int j=1;j<=n;j++) {scanf("%d",&a[j]);if (a[j]>v/*/10*/) a[j]=0; sum[j]=sum[j-1]+a[j];}//for (int j=1;j<=n;j++) printf("%d ",sum[j]);for (int k=0;k<=v+sum[n];k++)for (int j=n;j>=0;j--){if (k-sum[j]<0) continue;if (f[i-1][k-sum[j]]){f[i][k]=1;A[i][k]=j;break; }}for (int k=0;k<=v+sum[n];k++) for (int j=A[i][k]-1;j>=1;j--){f[i][k-sum[j]]=f[i][k]||f[i][k-sum[j]]; }//cout<<endl;}
// v/=10;int i=v;while (!f[T][i]){i--;}printf("%d\n",v-i);
/*for (int i=0;i<=T;i++){for (int j=0;j<=v;j++)if (f[i][j]) cout<<i<<','<<j<<' ';cout<<'\n';}while (1);
*/ return 0;
}
连续背包 (背包套背包)相关推荐
- 动态规划-----------01背包,完全背包与多重背包
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...
- 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包
动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...
- 01背包,完全背包,多重背包的个人总结
大一刚接触背包问题的时候就觉得绕.那时候真的是一点代码基础都没有强行去理解.每次都是以失败告终,一直到大二都还不会写背包问题. 后来某次模拟赛之后碰到了背包问题,觉得这个还是挺简单的,终于是下定决心准 ...
- 浅说——九讲背包之01背包
所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...
- hdu 3732(01背包转多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包..最多也就11*11=121件 ...
- 动态规划 4、基础背包问题总结(多重背包与多重背包的转化)
描述: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 变式:有的物品 ...
- 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...
- 01背包,完全背包,多重背包,分组背包的使用条件以及代码模板
背包问题算是动态规划中的入门题目了,背包问题有很多种.背包九讲中讲的很清楚,我就不班门弄斧了,针对几种比较常见的背包问题,阐述一下它的使用前提和代码模板. 1.01背包问题 题目 有N 件物品和一个容 ...
- 背包——变向背包(hdu2546,1114,1203,2189)
*本篇讲述一些可以根据背包的思路解决的一些例题. 如对01背包.多重背包.完全背包等不理解的同学请参考前几篇博客~ 题目链接: http://acm.hdu.edu.cn/showproblem.ph ...
- 01背包、完全背包、多重背包问题的C++实现及路径记录
这里主要实现路径记录,只求最值问题移步 01背包.完全背包.多重背包问题的C++实现 以下均打印输出路径,即装入背包的物品序号,和最大值. 01背包问题 #include <iostream&g ...
最新文章
- zookeeper代码浅析
- Linux文本处理tr命令笔记
- 服务器io修改,更改 Linux I/O 调度器来改善服务器性能
- Docker部署nginx并修改配置文件
- Form-Item Slot 自定义label内容
- linux安装gcc等程序包,Linux手动安装gcc-8.3.0
- 德标螺纹规格对照表_德标等螺纹对照表
- matlab 随机信道,随机空时无线信道模型及Matlab仿真
- Spark Hive实现基于协同过滤的电影推荐(MovieLens数据集)
- MS11-003在Internet Explorer中存在允许远程代码执行漏洞复现
- kotlin的代理和委托
- c语言汉字utf8,C语言汉字gbk转utf-8
- 永中word页码怎么从第二页开始_如何在Word的任意一页插入页码?原来还有这么简单的方法...
- Pure DNS 可能是迄今最不稳定的DNS
- 华为鸿蒙17日,华为又有大动作,于10月17日发布全新系列手机,或将采用鸿蒙系统...
- 【Unity】判断视频是否播放完毕
- FTP协议(文件传输协议)
- 软件测试 | 测试开发 | 探究 PHP_CodeSniffer 的代码静态分析原理
- PyG搭建GAT实现节点分类
- IP电话基本原理详细解析