连续背包(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;
}

连续背包 (背包套背包)相关推荐

  1. 动态规划-----------01背包,完全背包与多重背包

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  2. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  3. 01背包,完全背包,多重背包的个人总结

    大一刚接触背包问题的时候就觉得绕.那时候真的是一点代码基础都没有强行去理解.每次都是以失败告终,一直到大二都还不会写背包问题. 后来某次模拟赛之后碰到了背包问题,觉得这个还是挺简单的,终于是下定决心准 ...

  4. 浅说——九讲背包之01背包

    所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...

  5. hdu 3732(01背包转多重背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包..最多也就11*11=121件 ...

  6. 动态规划 4、基础背包问题总结(多重背包与多重背包的转化)

    描述: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 变式:有的物品 ...

  7. 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  8. 01背包,完全背包,多重背包,分组背包的使用条件以及代码模板

    背包问题算是动态规划中的入门题目了,背包问题有很多种.背包九讲中讲的很清楚,我就不班门弄斧了,针对几种比较常见的背包问题,阐述一下它的使用前提和代码模板. 1.01背包问题 题目 有N 件物品和一个容 ...

  9. 背包——变向背包(hdu2546,1114,1203,2189)

    *本篇讲述一些可以根据背包的思路解决的一些例题. 如对01背包.多重背包.完全背包等不理解的同学请参考前几篇博客~ 题目链接: http://acm.hdu.edu.cn/showproblem.ph ...

  10. 01背包、完全背包、多重背包问题的C++实现及路径记录

    这里主要实现路径记录,只求最值问题移步 01背包.完全背包.多重背包问题的C++实现 以下均打印输出路径,即装入背包的物品序号,和最大值. 01背包问题 #include <iostream&g ...

最新文章

  1. zookeeper代码浅析
  2. Linux文本处理tr命令笔记
  3. 服务器io修改,更改 Linux I/O 调度器来改善服务器性能
  4. Docker部署nginx并修改配置文件
  5. Form-Item Slot 自定义label内容
  6. linux安装gcc等程序包,Linux手动安装gcc-8.3.0
  7. 德标螺纹规格对照表_德标等螺纹对照表
  8. matlab 随机信道,随机空时无线信道模型及Matlab仿真
  9. Spark Hive实现基于协同过滤的电影推荐(MovieLens数据集)
  10. MS11-003在Internet Explorer中存在允许远程代码执行漏洞复现
  11. kotlin的代理和委托
  12. c语言汉字utf8,C语言汉字gbk转utf-8
  13. 永中word页码怎么从第二页开始_如何在Word的任意一页插入页码?原来还有这么简单的方法...
  14. Pure DNS 可能是迄今最不稳定的DNS
  15. 华为鸿蒙17日,华为又有大动作,于10月17日发布全新系列手机,或将采用鸿蒙系统...
  16. 【Unity】判断视频是否播放完毕
  17. FTP协议(文件传输协议)
  18. 软件测试 | 测试开发 | 探究 PHP_CodeSniffer 的代码静态分析原理
  19. PyG搭建GAT实现节点分类
  20. IP电话基本原理详细解析

热门文章

  1. Facebook Live 诞生的背后故事
  2. python爬取链家房屋及经纬度信息-以宁波为例
  3. 建立JDBC数据库连接(以eclipse与navicat连接为例)
  4. 普通火车为什么没有高铁快?--分布式概念入门
  5. 腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑
  6. 《新编计算机科学概论》一0.3 计算机与社会
  7. Less常用函数集合
  8. 【安卓逆向】护眼软件去广告教程(简单详细)软件名护眼宝
  9. HTML入门零基础教程(一)
  10. mysql、sql yog安装和常见的mysql语句