博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1531: [POI2005]Bank notes( 背包 )
阅读量:5064 次
发布时间:2019-06-12

本文共 1343 字,大约阅读时间需要 4 分钟。

多重背包... 

----------------------------------------------------------------------------

#include<bits/stdc++.h>
   
#define rep(i, n) for(int i = 0; i < n; i++)
#define clr(x, c) memset(x, c, sizeof(x))
 
using namespace std;
 
const int maxn = 209, maxk = 20009, inf = 0x3f3f3f3f;
 
int n, b[maxn], c[maxn], K, dp[maxk];
 
int main() {
freopen("test.in", "r", stdin);
cin >> n;
rep(i, n) scanf("%d", b + i);
rep(i, n) scanf("%d", c + i);
cin >> K;
clr(dp, inf), dp[0] = 0;
rep(i, n) {
for(int j = 1; j <= c[i]; c[i] -=j, j <<= 1)
   for(int k = K; k >= j * b[i]; k--)
       dp[k] = min(dp[k], dp[k - j * b[i]] + j);
if(c[i])
for(int k = K; k >= c[i] * b[i]; k--)
   dp[k] = min(dp[k], dp[k - c[i] * b[i]] + c[i]);
}
cout << dp[K] << "\n";
return 0;
}

----------------------------------------------------------------------------

1531: [POI2005]Bank notes

Time Limit: 5 Sec  
Memory Limit: 64 MB
Submit: 286  
Solved: 147
[ ][ ][ ]

Description

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

Input

第一行一个数 n, 1 <= n <= 200. 接下来一行 n 个整数b1, b2,..., bn, 1 <= b1 < b2 < ... < b n <= 20 000, 第三行 n 个整数c1, c2,..., cn, 1 <= ci <= 20 000, 表示每种硬币的个数.最后一行一个数k – 表示要凑的面值数量, 1 <= k <= 20 000.

Output

第一行一个数表示最少需要付的硬币数

Sample Input

3
2 3 5
2 2 1
10

Sample Output

3

HINT

Source

 

转载于:https://www.cnblogs.com/JSZX11556/p/4668118.html

你可能感兴趣的文章
elk的一些零碎知识
查看>>
史上最全的MSSQL笔记
查看>>
版本分支管理标准 - Trunk Based Development 主干开发模型
查看>>
BZOJ3589 动态树(树链剖分+容斥原理)
查看>>
大整数加法
查看>>
POJ 3553 Light Switching Game 博弈论 nim积 sg函数
查看>>
java static类
查看>>
redux中的小bug
查看>>
课堂练习:返回一个二维数组中最大子数组的和
查看>>
一、Numpy库与多维数组
查看>>
Excel VBA实现批量创建链接
查看>>
ios配置pch文件及使用
查看>>
<address>标签,为网页加入地址信息
查看>>
Daily Scrum Meeting ——ZeroDay(Beta)12.08
查看>>
二十一、Hadoop学记笔记————kafka的初识
查看>>
String
查看>>
js 对象数组去重
查看>>
并查集模板
查看>>
Android 常用开源框架源码解析 系列 (四)Glide
查看>>
操作系统概述
查看>>