BAN-Bank Notes(更麻烦的背包方案)
这题的记录方案,真是,毒瘤........
\(很明显的二进制优化多重背包\)
\(重点是,如何记录方案?\)
\(用一维的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(更麻烦的背包方案)的更多相关文章
- BZOJ 1531: [POI2005]Bank notes( 背包 )
多重背包... ---------------------------------------------------------------------------- #include<bit ...
- bzoj1531: [POI2005]Bank notes(多重背包)
1531: [POI2005]Bank notes Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 521 Solved: 285[Submit][Sta ...
- bzoj1531[POI2005]Bank notes 单调队列优化dp
1531: [POI2005]Bank notes Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 559 Solved: 310[Submit][Sta ...
- 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 ...
- caioj 1412 动态规划3:a+b问题(完全背包方案数)
每个素数就是一个物品,然后就相当于求完全背包方案数 把max改成+就好了. #include<cstdio> #include<vector> #include<cstr ...
- HDU 1284 钱币兑换问题 (动态规划 背包方案数)
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 洛谷P1832 A+B Problem(再升级) 题解 完全背包方案计数
题目链接:https://www.luogu.com.cn/problem/P1832 题目大意: 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 解题思路: 首先找到所有 \(\le n\ ...
- 【多重背包小小的优化(。・∀・)ノ゙】BZOJ1531-[POI2005]Bank notes
[题目大意] Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出 ...
- 【bzoj1531】[POI2005]Bank notes 多重背包dp
题目描述 Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出面值 ...
随机推荐
- Netty是如何处理新连接接入事件的?
更多技术分享可关注我 前言 前面的分析从Netty服务端启动过程入手,一路走到了Netty的心脏——NioEventLoop,又总结了Netty的异步API和设计原理,现在回到Netty服务端本身,看 ...
- shell命令(一)
什么是shell? Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效.安全.低成本地使用Linux内核,这就是Shell的本质. shell与Linux系统关系图 shell ...
- AJ学IOS(40)UI之核心动画_抖动效果_CAKeyframeAnimation
AJ分享,必须精品 效果: 效果一: 效果二: 代码: // // NYViewController.m // 图片抖动 // // Created by apple on 15-5-8. // Co ...
- Python-气象-大气科学-可视化绘图系列(一)——利用xarray读取netCDF文件并画图(代码+示例)
本文原创链接:https:////www.cnblogs.com/zhanling/p/12192978.html 1 import numpy as np import xarray as xr i ...
- 零基础的学习者应该怎么开始学习呢?Python核心知识学习思维分享
近几年,Python一路高歌猛进,成为最受欢迎的编程语言之一,受到无数编程工作者的青睐. 据悉,Python已经入驻部分小学生教材,可以预见学习Python将成为一项提高自身职业竞争力的必修课.那么零 ...
- PHP xml 外部实体注入漏洞学习
XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Exten ...
- selenium 执行js代码
获取一个input输入框的值: JavascriptExecutor js =(JavascriptExecutor) driver; merchatName=js.executeScript(&qu ...
- 解决cvc-complex-type.2.4.a: Invalid content was found starting with element
今天用myeclipse导入 一个项目出现后出现cvc-complex-type.2.4.a: Invalid content was found starting with element 'inf ...
- 安装宝塔检测到系统已存在Apache,请使用纯净安装
执行命令 停止服务 net stop Apache2.4 删除服务 sc delete apache
- python学习14集合
'''''''''集合:set1.定义:是一个无序的不重复元素序列.2.表示:大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用 ...