题意:用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;
}