[POI2005]BAN-Bank Notes

POI真好玩。。

如果没有记录方案的话就是一个简单的二进制或单调队列优化多重背包的问题。

但是非常难受的是要记录方案。

而且空间只给了\(64MB\),,令人不适。。。

可以记录状态\(to[i][j]\)表示从第i个物品转移到了j体积,这个在转移的时候记一下就行了

这个空间如果用二进制优化的话就需要\(nlog_bk\)的空间,大概是\(200×14×20000=56000000\)空间,必须开成\(bool\)数组,如果直接开\(int\)就\(MLE\)

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=205,K=20005;
int n,a[N],f[K],b[N],tot,k,ans[N];
bool to[N<<4][K];
struct THINGS{
int vol,val,id;
}t[N<<4];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
for(int i=1;i<=n;i++) {
for(int j=1;b[i]>=j;b[i]-=j,j<<=1)
t[++tot]=(THINGS){a[i]*j,j,i};
if(b[i]) t[++tot]=(THINGS){a[i]*b[i],b[i],i};
}
scanf("%d",&k);
memset(f,0x3f,sizeof f);
f[0]=0;
for(int i=1;i<=tot;i++)
for(int j=k;j>=t[i].vol;j--)
if(f[j]>f[j-t[i].vol]+t[i].val) to[i][j]=1,f[j]=f[j-t[i].vol]+t[i].val;
printf("%d\n",f[k]);
int now=k,sum=f[k];
for(int i=tot;sum;) {
while(!to[i][now]) i--;
now-=t[i].vol;
ans[t[i].id]+=t[i].val;
sum-=t[i--].val;
}
for(int i=1;i<=n;i++) printf("%d ",ans[i]);
return 0;
}

[POI2005]BAN-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. 1531: [POI2005]Bank notes二进制优化(c++)

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

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

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

  7. ●BZOJ 1531 [POI2005]Bank notes

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

  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$ ...

  10. BZOJ 1531: [POI2005]Bank notes

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

随机推荐

  1. java读取中文分词工具(一)

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  2. android 用java代码设置布局、视图View的宽度/高度或自适应

    在achat项目中,对话内容的长宽设置为自适应.可是假设文本内容太多,则宽度几乎相同布满,若自己说的和对方说的都非常多内容.则满屏都是文字.则不easy分辨出是来自别人说的还是自己说的.那么须要对本身 ...

  3. jsp页面中使用javascript获取后台放在request或session中的值

    在JSP页面中.常常使用javascript,可是要出javascript获取存储在request,session, application中的值.例如以下是获取request中的值: 如果后台中有: ...

  4. 洛谷 P3112 后卫马克 —— 状压DP

    题目:https://www.luogu.org/problemnew/show/P3112 状压DP...转移不错. 代码如下: #include<iostream> #include& ...

  5. leetcode String相关

    目录 3无重复字符的最长子串 5最长回文子串 8字符串转换整数(atoi), 9回文数,7整数反转 28实现strStr(), 459重复的子字符串(KMP) 43字符串相乘 71简化路径 93复原I ...

  6. 部署webservice常见问题汇总

    问题一 转自http://blog.csdn.net/xingxing513234072/article/details/38615997 处理程序“WebServiceHandlerFactory- ...

  7. PCB MS SQL 排序应用(row_number rank dense_rank NTILE PARTITION)

    一.排序前,准备数据 --表变量 ),流程数 int) insert into @table union all union all union all union all --查看一下 select ...

  8. selenium3 + python - expected_conditions判断元素

    expected_conditions 类 title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值 title_contains : 判断当前页面的title是否包含预 ...

  9. WebService开发-CXF

    Web Service 开发方式 Apache CXF 一.关于Apache CXF 在网址http://cxf.apache.org/可以查看到关于Apache CXF的下载及文档介绍,这里不再多做 ...

  10. 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

    上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...