5429 多重背包
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 钻石 Diamond
题目描述 Description
你有一个容量为M的背包,和N种物品。

每种物品都有三个属性,vi,wi,与ci,分别表示这种物品的体积、价值和件数。

你的任务是,从这些所给物品中,选出若干件,其体积之和不能超过背包容量,并且使所选物品的权值的和最大。

输入描述 Input Description
第一行两个整数N,M

接下来N行每行三个数vi,wi,ci描述第i件物品的属性

输出描述 Output Description
最大的权值和

样例输入 Sample Input
2 8

2 100 4

4 100 2

样例输出 Sample Output
400

数据范围及提示 Data Size & Hint
对于20%的数据,ci=1

对于60%的数据,N,M<=500,ci<=100

对于90%的数据,N,M<=3000

对于100%的数据,N,M<=7000,ci<=5000,保证答案不超过2147483647

解题思路:
此题若直接使用多重背包的版子会超时,需通过单调队列将其优化。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
int vi[7500],wi[7500],ci[7500];
int dp[7500];
typedef pair<int,int> p;
deque<p> qu;
int main()
{#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);int N,M;scanf("%d %d",&N,&M);rep(i,1,N) scanf("%d %d %d",&vi[i],&wi[i],&ci[i]);for(int i=1;i<=N;i++) {int v=vi[i],w=wi[i],c=ci[i];for(int d=0;d<v;d++) {while(!qu.empty()) qu.pop_back();for(int j=0;j<=(M-d)/v;j++) {if(j-qu.front().first>c) qu.pop_front();while(!qu.empty()&&dp[j*v+d]-j*w>=qu.back().second)qu.pop_back();qu.push_back(p(j,dp[j*v+d]-j*w));dp[j*v+d]=qu.front().second+j*w;}}}printf("%d\n",dp[M]);return 0;
}

codevs5429 多重背包【多重背包+单调队列】相关推荐

  1. [Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)

    4182: Shopping Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 374  Solved: 130 [Submit][Status][Di ...

  2. 【学习笔记】多重背包相关优化——二进制优化/单调队列优化

    多重背包--二进制优化/单调队列优化 二进制优化 单调队列优化 代码都是 POJ1742 的,注意,那道题二进制优化会超时. 普通的多重背包式子,物品个数限制:c[i]c[i]c[i],单个物品价值 ...

  3. Luogu4156 WC2016 论战捆竹竿 KMP、同余类最短路、背包、单调队列

    传送门 豪华升级版同余类最短路-- 官方题解 主要写几个小trick: \(1.O(nm)\)实现同余类最短路: 设某一条边长度为\(x\),那么我们选择一个点,在同余类上不断跳\(x\),可以形成一 ...

  4. 单调队列多重背包时间复杂度O(vn)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...

  5. 多重背包单调队列优化思路_多重背包之单调队列优化理论性总结

    多重背包之单调队列优化: 若用F[j]表示对容量为j的背包,处理完前i种物品后,背包内物品可达到的最大总价值,并记m = min(n, j / v).放入背包的第i种物品的数目可以是:0.1.2--, ...

  6. 多重背包单调队列优化思路_动态规划入门——多重背包与单调优化

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构的第14篇文章,也是动态规划专题的第三篇. 在之前的文章当中,我们介绍了多重背包的二进制拆分的解法.在大多数情况下,这种 ...

  7. 多重背包单调队列优化思路_多重背包问题

    题目描述: 无优化版本: int main(){int m, n;cin >> n >> m;for(int i = 1; i <= n; ++i){int v , w, ...

  8. 多重背包O(N*V)算法详解(——使用单调队列)

    多重背包O(N*V)算法详解(--使用单调队列) 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网上关 ...

  9. 多重背包的优化 二进制/单调队列解析

    由于做题的时候老被这玩意儿卡住的我很不爽,决定写个blog来加深自己的印象以及不用到处找资料回忆. 多重背包的问题的具体描述如下: 给出一个体积为v的背包,有n个物品,每个物品可以选c[i]次,问最多 ...

最新文章

  1. R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注、特殊区域标注
  2. Ironic 的 Rescue 救援模式实现流程
  3. 提取图像的边界,用数字标记不同的目标边界
  4. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-10底层驱动之I2C
  5. 遥感计算机分类实验的难点,8-遥感实验.doc
  6. RPNet++:人脸对齐faceAlignment和基于CNN的三维人脸恢复
  7. QingStor NeonSAN跻身四强 新风口下的青云QingCloud正在厚积薄发
  8. 【手把手带你入门深度学习之150行代码的汉字识别系统】学习笔记 ·003 用训练模型进行预测
  9. S32K116使用记录
  10. Vegas安装出现问题怎么办?
  11. 利息计算器 html,html+jQuery简单的利息计算器
  12. VC 获取IE版本号
  13. 保姆级Ruby on rails安装教程
  14. 在vue中使用jsmind组织架构或思维导图
  15. 腾讯入股艺龙,在线旅游市场引发关注
  16. 商品进销差价_商品进销差价如何计算及账务处理怎么做?
  17. 自己拥有一台服务器可以做哪些很酷的事情?
  18. Ubuntu管理员密码
  19. 基金申请-13:如何查论文的影响因子和SCI分区?
  20. B BL BLX BX详解

热门文章

  1. java jtable不可编辑_java – 使JTable单元不可编辑
  2. 如何占用计算机内存,电脑内存占用太高怎么办 教你电脑内存不够用解决方法...
  3. form表单图片预览 layui_layui 实现图片上传和预览
  4. python爬取新闻网站内容findall函数爬取_Python爬取新闻网标题、日期、点击量
  5. circlegan_【源码解读】cycleGAN(二) :训练
  6. java数据段 静态区_回顾一下基础,关于栈与堆,常量池,静态区
  7. curl socket 访问_使用Curl、socket、file_get_contents三种方法POST提交数据 | 学步园
  8. oracle数据库配置管理,Oracle配置管理
  9. 二次开发_企业ERP系统二次开发问题的探讨分析
  10. oracle深度巡检指标,oracle DBA 巡检项目