uva674 - Coin Change(硬币找零)

开始的时候用的是dfs+剪枝,很快的就TLE了

后来想到dp的记忆化搜索。于是开始苦苦的寻求状态方程,经过一遍又一遍的模拟,我找到了一个规律,

就是每增加一种硬币就更新一次状态,但是所得规律不对,连样例都过不了,后来继续找。。。。

再后来,我就没出息的搜了结题报告了,,

等到我彻底理解了,才写的代码。

也勉强的算上转化为自己的东西了吧

代码如下:

#include <cstdio>
#include <cstring>
#define M 7500
int ans, v[5] = {1,5,10,25,50}, dp[M];
int main ()
{
    int n;
    dp[0] = 1;
    for(int i = 0; i < 5; i++)
        for(int j = 0; j < M; j++) if(j>=v[i])
            dp[j]+=dp[j-v[i]];
    while(scanf("%d",&n)!=EOF)
        printf("%d\n",dp[n]);
    return 0;
}


你可能感兴趣的:(uva674 - Coin Change(硬币找零))