UVA 674 - Coin Change
2011-03-29 18:03
330 查看
题目大意:
用5种面额的硬币找钱(钱恰好),求方法数。
要注意 1.Note that we count that there is one way of making change for zero cent.
2. Your program should be able to handle up to 7489 cents.
题目类型: dp
分析:
记di 为要找i元钱的方法数,则di= { ∑(dj)| j=i-ck, k = 0~4 } ck 为硬币面额。
①开始的时候单纯这样做,发现会有重复,如d11 = d10+d6+d1 , 而d10 和 d6里包含 1 5 11111、 5 111111 重复。所以,把
d 指标升级到二维, 加入pre 指之前一个取的硬币,循环 k下标 则从pre开始,即总是先取大面额的硬币,于是对于上例只会出现 5 111111这种情况了。 (详见代码注释)
②开始的时候竟然TLE了,测试的数据应该有7489组(7490的ans就会超出int32了)。最后发现是不该把vis数组再清空的。因为针对的是同一个问题(都是那五种面额),则指标 d值应该都是一样的。改后 0.02s AC。
代码:
用5种面额的硬币找钱(钱恰好),求方法数。
要注意 1.Note that we count that there is one way of making change for zero cent.
2. Your program should be able to handle up to 7489 cents.
题目类型: dp
分析:
记di 为要找i元钱的方法数,则di= { ∑(dj)| j=i-ck, k = 0~4 } ck 为硬币面额。
①开始的时候单纯这样做,发现会有重复,如d11 = d10+d6+d1 , 而d10 和 d6里包含 1 5 11111、 5 111111 重复。所以,把
d 指标升级到二维, 加入pre 指之前一个取的硬币,循环 k下标 则从pre开始,即总是先取大面额的硬币,于是对于上例只会出现 5 111111这种情况了。 (详见代码注释)
②开始的时候竟然TLE了,测试的数据应该有7489组(7490的ans就会超出int32了)。最后发现是不该把vis数组再清空的。因为针对的是同一个问题(都是那五种面额),则指标 d值应该都是一样的。改后 0.02s AC。
代码:
]#include<cstdio> #include<cstring> using namespace std; #define MAXN 7492 //测试7490的结果是超出int32 int c[5] = {50, 25, 10, 5, 1}; int d[5][MAXN], vis[5][MAXN]; int money; int dp(int pre, int cur) //为保证不重复,加入pre { if(cur == 0) return 1; // if(vis[pre][cur]) return d[pre][cur]; vis[pre][cur] = 1; int sum=0; for(int i=pre; i<5; i++) if(cur >= c[i]) { int j=cur-c[i]; sum+=dp(i, j); } return d[pre][cur] = sum; } int main() { while(scanf("%d", &money) != EOF) { //memset(vis, 0, sizeof(vis)); //特别注意这里不用清空vis的,因为d值不用重新算,不然7489组数据超时不解释 printf("%d/n", dp(0, money)); } }
相关文章推荐
- UVa-674-Coin Change
- UVA - 674 Coin Change
- UVA 674 Coin Change
- uva 674 Coin Change
- uva 674 coin change 动态规划
- UVA 674 coin change
- UVa-674-Coin Change
- uva 674 - Coin Change
- uva 674 Coin Change
- UVa 674 - Coin Change
- UVa 674 Coin Change(经典DP)
- UVA 674 Coin Change【补充分析】
- UVA 674 Coin Change
- Coin Change - UVa 674 换硬币的dp
- UVa 674: Coin Change
- uva 674 Coin Change(类似完全背包)
- UVA674- Coin Change
- [背包九讲笔记] UVa 674 Coin Change
- UVA674——DP(找钱1)—— Coin Change
- uva 674 Coin Change