传送门

这题的记录方案,真是,毒瘤........

\(很明显的二进制优化多重背包\)

\(重点是,如何记录方案?\)

\(用一维的pre数组是不行的!!(不信你去试试,方案之间选的物品会重复)\)

\(那就用二维的pre[i][j],等于1代表选了i物品,等于0相当于没选\)

最后记得设置成bool类型。

#include <bits/stdc++.h>
using namespace std;
const int maxn=3000;
int n,m;
struct p{
int v,w,h;
}a[3009];
int cnt,q[309],dp[20009],h[20009];
bool pre[3009][20009];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>q[i];
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
for(int j=1;j<=s;j*=2)
{
s-=j;
a[++cnt].v=j*q[i],a[cnt].w=j,a[cnt].h=i;
}
if(s!=0)
a[++cnt].v=s*q[i],a[cnt].w=s,a[cnt].h=i;
}
cin>>m;
memset(dp,20,sizeof(dp));
dp[0]=0;
for(int i=1;i<=cnt;i++)
for(int j=m;j>=a[i].v;j--)
{
if(dp[j]>dp[j-a[i].v]+a[i].w)
{
pre[i][j]=1;
dp[j]=dp[j-a[i].v]+a[i].w;
}
}
int ji=cnt,z=m;
while(1)
{
if(pre[ji][z])//如果选了ji这个物品,开始转移
{
z-=a[ji].v;
h[a[ji].h]+=a[ji].w;
}
ji--;
if(ji==0) break;
}
cout<<dp[m]<<endl;
for(int i=1;i<=n;i++) cout<<h[i]<<" ";
}

BAN-Bank Notes(更麻烦的背包方案)的更多相关文章

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

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

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

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

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

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

  4. POJ 3093 Margaritas(Kind of wine) on the River Walk (背包方案统计)

    题目 Description One of the more popular activities in San Antonio is to enjoy margaritas in the park ...

  5. caioj 1412 动态规划3:a+b问题(完全背包方案数)

    每个素数就是一个物品,然后就相当于求完全背包方案数 把max改成+就好了. #include<cstdio> #include<vector> #include<cstr ...

  6. HDU 1284 钱币兑换问题 (动态规划 背包方案数)

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  7. 洛谷P1832 A+B Problem(再升级) 题解 完全背包方案计数

    题目链接:https://www.luogu.com.cn/problem/P1832 题目大意: 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 解题思路: 首先找到所有 \(\le n\ ...

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

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

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

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

随机推荐

  1. http的长连接和websocket的区别

    一.什么是http协议 HTTP是一个应用层协议,无状态的,端口号为80.主要的版本有1.0/1.1/2.0.   HTTP/1.* 一次请求-响应,建立一个连接,用完关闭: HTTP/1.1 串行化 ...

  2. 2019-08-02【机器学习】有监督学习之分类 SVC算法 实例(上证指数跌涨预测)

    样本: 代码:有几处与教程不同,自行修改 import pandas as pd import numpy as np from sklearn import svm from sklearn imp ...

  3. day02,静态库和动态库

    一.首先我们来看一下什么是静态库和动态库,在这之前我们来看一下编译成可执行文件的过程: 1.静态库(.a..lib):就是在使用的时候会把代码复制到文件中: 它的优点:独立,在链接后不需要静态库源文件 ...

  4. 用python爬取之后发现果然如此,都说知乎的小姐姐漂亮

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  5. Xshell远程连接Linux系统

    一般来说我们连接Linux,会使用到一些远程连接工具 比如:Xshell和Xftp Xshell:远程连接linux系统 Xftp:远程在Linux系统中上传或下载文件 Xshell和Xftp百度云链 ...

  6. mysql创建存储过程及调用

    创建存储过程简单示例: DELIMITER //CREATE PROCEDURE ccgc()BEGINSELECT * FROM TEXT;SELECT * FROM s_user;END//DEL ...

  7. 实现一个简单的基于动态代理的 AOP

    实现一个简单的基于动态代理的 AOP Intro 上次看基于动态代理的 AOP 框架实现,立了一个 Flag, 自己写一个简单的 AOP 实现示例,今天过来填坑了 目前的实现是基于 Emit 来做的, ...

  8. vue2.x学习笔记(十五)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12609450.html. 组件的自定义事件 这里来学习一下组件中的自定义事件. 事件名 不同于组件名和prop,事 ...

  9. 论JDK5/7/8版本都做出了哪些革新

    在Java发展的里程碑上,有三个版本做出的改动,是革命性的 为什么说是革命性的呢? 因为这三个版本所推出的有些新机制,在之后的Java框架开发.新类的产生等等中, 都被广泛使用了. 那么,这三个版本的 ...

  10. AppBoxFuture: Web在线报表设计与PDF生成

      企业应用需要打印各类单证及报表,为了方便开发此类应用作者在框架内集成了报表引擎,并且实现了基于Canvas的Web在线报表设计及基于PDFJS的报表查看与打印. 一.原理浅析 报表模型:由Xml描 ...