Uva - 674 - Coin Change

题意:用5种面值的硬币组成S有几种方法。

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=114&problem=615

——>>设d[i][j]为用前i种硬币组成j有几种方法,则

当j >= 第i种面值的硬币时,d[i][j] = d[i-1][j-c[i]] + d[i-1][j];

否则,只有一种选择,d[i][j] = d[i-1][j];

第一次没打表,就TLE了……打表AC!

#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 7489 + 10;
int d[6][maxn], c[] = {0, 50, 25, 10, 5, 1};

int main()
{
    int S, i, j;
    memset(d, 0, sizeof(d));
        d[0][0] = 1;
        for(i = 1; i <= 5; i++)
            for(j = 0; j < maxn; j++)
                if(j >= c[i]) d[i][j] = d[i][j-c[i]] + d[i-1][j];
                else d[i][j] = d[i-1][j];
    while(~scanf("%d", &S)) printf("%d\n", d[5][S]);
    return 0;
}


你可能感兴趣的:(Uva - 674 - Coin Change)