您的位置:首页 > 其它

POJ1742 Coins 【多重背包】

2017-03-26 12:59 429 查看
题目链接:http://poj.org/problem?id=1742

题意:

一个人有 n 种硬币,每种硬币价值(Ai)不同,每种硬币都有一个数量(Ci),问能凑出多少个 m 以内的币值?

题解:

多重背包直接网上套

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int dp[100005];
int n, m;
int a[105], b[105], sum[100005];

int main() {
while( scanf("%d %d", &n, &m), n+m ) {
for ( int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);
for (
4000
int i = 1; i <= n; i ++ ) scanf("%d", &b[i]);

memset(dp, 0, sizeof(dp));
dp[0] = 1;

int ans = 0;
for ( int i = 1; i <= n; i ++ ) {
memset(sum, 0, sizeof(sum));
for ( int j = a[i]; j <= m; j ++ ) {
if(!dp[j] && dp[j-a[i]] && sum[j-a[i]] < b[i]) {
dp[j] = 1;
sum[j] = sum[j-a[i]]+1;
ans ++;
}
}
}
printf("%d\n", ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: