您的位置:首页 > 其它

Lightoj 1231 - Coin Change (I) (裸裸的多重背包)

2015-11-06 15:43 387 查看
题目链接:

  Lightoj 1231 - Coin Change (I)

题目描述:

  就是有n种硬币,每种硬币有两个属性(价值,数目)。问用给定的硬币组成K面值,有多少种方案?

解题思路:

  赤果果的多重背包,简单搞一下就好了。席八!烦烦烦。今天绝对是出门刷提前没看黄历,刚开始套了一个多重背包板子,蓝而跑出来的答案并不对,改来改去就错在细节的地方。

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

typedef long long LL;
const int mod = 100000007;
const int maxn = 1010;
int dp[60][maxn], a[60], c[60];

int main ()
{
int T;
scanf ("%d", &T);
for (int t=1; t<=T; t++)
{
int n, k;
scanf ("%d %d", &n, &k);
memset (dp, 0, sizeof(dp));
dp[0][0] = 1;

for (int i=1; i<=n; i++)
scanf ("%d", &a[i]);
for (int i=1; i<=n; i++)
scanf ("%d", &c[i]);

for (int i=1; i<=n; i++)
for (int j=0; j<=c[i]; j++)
for (int x=k; x>=a[i]*j; x--)
{
dp[i][x] = (dp[i][x] + dp[i-1][x-a[i]*j]) % mod;
}

printf ("Case %d: %d\n", t, dp
[k]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: