题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=1531

题解:
单调队列优化多重背包DP
(弱弱的我今天总算是把这个坑给填了。。。)

令V[i]为第i种硬币的面值,C[i]为第i种硬币的数目。
定义DP[i][j]表示用了前i种硬币,凑出面值为j的最小硬币数。
先看看这个题用最裸的背包是如何转移的:
DP[i][j]=min(dp[i-1][j-k*V[i]]]+k)

然后,我们令 a=⌊j÷V[i]⌋ (⌊ ⌋:向下取整),b=j%V[i]
那么 j=a*V[i]+b
接下来这样考虑,对于一个当前计算的总面值j,
同样枚举k,但不再像之前那样表示选择了几个i号硬币,
而是表示相对于a而言,少选几个i号硬币。
换句话说,我们对于当前的j,在默认要选a个i号硬币基础上,去枚举少选k个该硬币。
那么怎样转移呢:
DP[i][j]=min(dp[i-1][b+K*V[i]]+a-k)
其实意思还是很明了的,就是选了 a-k 个i号硬币嘛。(好好理解一下)

然后可以把取小项里面的a提出来:
DP[i][j]=min(dp[i-1][b+K*V[i]]-k)+a
再看看这个式子,如果固定i和b,取小项里面就只有K是变化的,
把其看成是一个只与k有关的函数,
显然就可以用单调队列维护最小值然后O(1)转移啦。

具体做法是:
第一层循环先枚举硬币i,
第二层循环再枚举一个b值,
第三层循环接着枚举j,需要满足j=b+a*V[i]
然后第三层循环里面的转移就可以用单调队列维护了,

总的复杂度为 O(N*M)

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 205
#define MAXM 20005
using namespace std;
int V[MAXN],C[MAXN],DP[MAXN][MAXM];
int N,M;
int main(){
static int QK[MAXM],l,r;
scanf("%d",&N);
for(int i=1;i<=N;i++) scanf("%d",&V[i]);
for(int i=1;i<=N;i++) scanf("%d",&C[i]);
memset(DP,0x3f,sizeof(DP));
scanf("%d",&M);
DP[0][0]=0;
for(int i=1;i<=N;i++){
for(int b=0,a;b<V[i];b++){
l=1; r=0;
for(int j=b;a=j/V[i],j<=M;j+=V[i]){
while(l<=r&&DP[i-1][b+QK[r]*V[i]]-QK[r]>=DP[i-1][b+a*V[i]]-a) r--;
QK[++r]=a;
while(l<=r&&a-QK[l]>C[i]) l++;
DP[i][j]=DP[i-1][b+QK[l]*V[i]]-QK[l]+a;
}
}
}
printf("%d",DP[N][M]);
return 0;
}

  

●BZOJ 1531 [POI2005]Bank notes的更多相关文章

  1. BZOJ 1531: [POI2005]Bank notes( 背包 )

    多重背包... ---------------------------------------------------------------------------- #include<bit ...

  2. BZOJ 1531: [POI2005]Bank notes

    按余数分类 单调队列优化 #include<cstdio> using namespace std; int n,m,b[205],c[205],F[20005]; struct node ...

  3. 1531: [POI2005]Bank notes二进制优化(c++)

    Description Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我 ...

  4. bzoj1531[POI2005]Bank notes 单调队列优化dp

    1531: [POI2005]Bank notes Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 559  Solved: 310[Submit][Sta ...

  5. bzoj1531: [POI2005]Bank notes(多重背包)

    1531: [POI2005]Bank notes Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 521  Solved: 285[Submit][Sta ...

  6. bzoj1531: [POI2005]Bank notes

    Description Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我 ...

  7. 【bzoj1531】[POI2005]Bank notes 多重背包dp

    题目描述 Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出面值 ...

  8. 2018.09.08 bzoj1531: [POI2005]Bank notes(二进制拆分优化背包)

    传送门 显然不能直接写多重背包. 这题可以用二进制拆分/单调队列优化(感觉二进制好写). 所谓二进制优化,就是把1~c[i]拆分成20,21,...2t,c[i]−2t+1+1" role= ...

  9. [POI2005]Bank notes

    link 试题分析 我们发现此题是一个十分简单的多重背包.但是按照朴素写法会超时.所以要去考虑优化. 我们发现我们若$W=7$,可以拆成$1+2+4$,不用每次$1+1+1+1+1+1+1$,从$N$ ...

随机推荐

  1. 大神都在看的RxSwift 的完全入坑手册

    大神都在看的RxSwift 的完全入坑手册 2015-09-24 18:25 CallMeWhy callmewhy 字号:T | T 我主要是通过项目里的 Rx.playground 进行学习和了解 ...

  2. 201421123042 《Java程序设计》第3周学习总结

    #Week03-面向对象入门 1. 本周学习总结 1.1写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 本周学习关键词:类,对象,封装,关键词:final,this,statis. 1 ...

  3. Tomcat 8项目无法启动,无报错

    作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息: Log4j:[2015-10-29 ...

  4. (原创)不带模板的OLE输出EXCEL

    目前我已知的EXCEL输出方式有3种: 1.GUI_DOWNLOAD函数输出(适用于简单无格式要求的输出). 2.OLE输出(适用于对EXCEL格式输出有特殊要求的,但是因其填充数据和设置格式是基于一 ...

  5. 使用HttpClient4.5实现HTTPS的双向认证

    说明:本文主要是在平时接口对接开发中遇到的为保证传输安全的情况特要求使用https进行交互的情况下,使用httpClient4.5版本对HTTPS的双向验证的  功能的实现    首先,老生常谈,文章 ...

  6. Project facet is Java version 1.7 is not spported

    在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not supported." 项目中的jdk1.7不支持.说明项目是其 ...

  7. (function(root,factory){})(this,function($){}) 一个立即执行的匿名函数自调

    因为新公司用到ocx 我就开始看原来的代码 无意中发现这个 可能原来比较low吗(虽然现在也很low吧)没发现这个东东 还可以这样写 于是乎我开始了探索 完整代码如下 HTML <div id= ...

  8. 08-TypeScript中的类

    类的概念通常是在后端开发中实现的思想,比如C#.C++或Java,传统的JavaScript开发通过使用原型模式来模拟类的功能.在TypeScript中,天生就是支持类 的,可以让前端的开发更加具有面 ...

  9. 剑指offer-删除链表中重复的节点

    题目描述   在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处 ...

  10. 快速搭建ssm框架

    快速搭建SSM框架 因为最近有很多朋友问我自己的项目搭建的不够完善,并且经常出现一些小问题,那么今天我又整理了一下文档教大家如何快速搭建SSM框架我是用 eclipse搭建的,如果想用idear的话我 ...