\(\\\)

Description


给出 \(N\) 种货币的面值 \(b_i\) 和个数 \(c_i\) ,求最少需要用多少个硬币凑出 \(Q\) 元钱,并输出任意一种方案。

  • \(n\le 200,Q,b_i ,c_i\le 2\times 10^4,\) 空间限制 64 M。

\(\\\)

Solution

空间计算不讲道理

如果不输出方案的话,就是一个普通的多重背包了对吧。

\(f[i]\) 表示达到体积为 \(i\) 的最少硬币数,然后直接二进制拆分就好了。

考虑转移的时候记录 \(pre\) 。

按照一般的动规方式,我们需要记录某一个状态转移自哪一个状态,这一题种,我们只需要记录转移自的上一个体积即可,若未转移指向自己。

但是发现空间爆炸。

分析转移性质,每次做背包的物品大小固定,所以转移自的状态也是确定的,所以我们只需要用一个 $bool $ 数组记录当前位置是否转移过即可。

但是依旧不明白为什么这样空间开的下 手算大小在 114 M左右

\(\\\)

Code



#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 20010
#define R register
#define gc getchar
using namespace std; inline int rd(){
int x=0; bool f=0; char c=gc();
while(!isdigit(c)){if(c=='-')f=1;c=gc();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return f?-x:x;
} bool g[3000][N]; int n,k,tot,b[210],c[210],f[N],bin[30]={1},cnt[210]; struct obj{int v,w,p;}s[3000]; inline void calc(int v,int w){
for(R int i=k;i>=v;--i)
if(f[i]>f[i-v]+w) g[tot][i]=1,f[i]=f[i-v]+w;
} inline void add(int v,int w,int ty){
s[++tot].v=v; s[tot].w=w;
s[tot].p=ty; calc(v,w);
} void dfs(int v,int t){
if(v==0) return;
while(!g[t][v]) --t;
cnt[s[t].p]+=s[t].w;
dfs(v-s[t].v,t-1);
} int main(){
n=rd();
memset(f,0x3f,sizeof(f)); f[0]=0;
for(R int i=1;i<=30;++i) bin[i]=(bin[i-1]<<1);
for(R int i=1;i<=n;++i) b[i]=rd();
for(R int i=1;i<=n;++i) c[i]=rd();
k=rd();
for(R int i=1;i<=n;++i){
for(R int j=0;j<=30;++j){
if(c[i]<bin[j]) break;
c[i]-=bin[j];
add(bin[j]*b[i],bin[j],i);
}
if(c[i]) add(c[i]*b[i],c[i],i);
}
printf("%d\n",f[k]);
dfs(k,tot);
for(R int i=1;i<=n;++i) printf("%d ",cnt[i]);
return 0;
}

[ POI 2005 ] Bank Notes的更多相关文章

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

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

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

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

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

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

  4. bzoj1531: [POI2005]Bank notes

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

  5. DSY1531*Bank notes

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

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

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

  7. 【多重背包小小的优化(。・∀・)ノ゙】BZOJ1531-[POI2005]Bank notes

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

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

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

  9. ●BZOJ 1531 [POI2005]Bank notes

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1531 题解: 单调队列优化多重背包DP (弱弱的我今天总算是把这个坑给填了...) 令V[i ...

随机推荐

  1. Spring Cloud(7):Zuul自定义过滤器和接口限流

    上文讲到了Zuul的基本使用: https://www.cnblogs.com/xuyiqing/p/10884860.html 自定义Zuul过滤器: package org.dreamtech.a ...

  2. Ubuntu 16.04 LTS GNOME版本下载

    下载地址: http://cdimage.ubuntu.com/ubuntu-gnome/releases/ Ubuntu GNOME发行版本启动已经有三年的时间了,在社区用户对于在稳定可靠的Ubun ...

  3. WebLogic(12C)——简单公布和JDBC

    一,简单公布应用 1.点击"安装".開始部署应用: 2,找到要部署的项目路径: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFue ...

  4. cocos2dx塔防游戏逻辑

    cocos2dx 塔防游戏逻辑 1.欢迎界面 2.tield制作游戏地图,空块设置cantouch属性为1 3.设置地图锚点,把锚点增加一个锚点容器,给怪物的行走函数传入 该锚点容器參数,让怪物依照锚 ...

  5. SQL的事务回滚操作带案例分析

    SET XACT_ABORT on  BEGIN TRAN  INSERT INTO [PDA_Action] VALUES ('採购入库1')  INSERT INTO [PDA_Action] V ...

  6. 关于MacBook怎么更新Android SDK

    昨天公司的人给了我一个VPN,可是还是无法更新SDK,后来发现将下图: 通过VPN发送全部流量勾选以后就能够连接更新了,哎.处处皆学问,特此分享一下此经验. 喜欢的朋友关注我哦! 多谢支持

  7. hdu 4864 Task(贪心)

    pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 大致题意:有n台机器和m个任务,都有两个參数工作时间time和难度le ...

  8. 开发,从需求出发 &#183; 之二 造飞机的工厂

    CD镇楼~~! 如今.让我们切换到后端开发者的角度看问题.我们须要做的是实现一下这个类,让它返回真实的业务数据. package cn.com.sitefromscrath.service; impo ...

  9. Android 4.4.2 动态加入JNI库方法记录 (一 JNI库层)

    欢迎转载,务必注明出处.http://blog.csdn.net/wang_shuai_ww/article/details/44456755 本篇是继<s5p4418 Android 4.4. ...

  10. HDU 4445 数学-抛物运动

                                                          D - Crazy Tank                                 ...