UVa 674 - Coin Change
2013-06-09 18:26
393 查看
/* 对于值6, 方案1、5 等效 5、1, 即硬币可以是无序的,所以必须增加一个维度让其有序。 d[i][j] : 表示使用了硬币1-i(i必使用了)组成j值的方案数 */ #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; const int TYPE = 6; const int MAXN = 7500; int coins[TYPE] = {0, 1, 5, 10, 25, 50}; int n; int d[TYPE][MAXN]; void dp() { d[0][0] = 1; for(int i=1; i<TYPE; i++) { for(int j=1; j<=n; j++) { for(int k=0; k<=i && j>=coins[i]; k++) { d[i][j] += d[k][j-coins[i]]; } } } } int main(){ #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); #endif n = MAXN - 2; dp(); while(scanf("%d", &n) == 1) { //printf("%d", n); int s = 0; for(int i=1; i<TYPE; i++) { s += d[i] ; } printf("%d\n", s); } return 0; }
/* 优化:使用一维的滚动数组 */ #include <cstdio> using namespace std; const int TYPE = 5; const int MAXN = 7500; int coins[TYPE] = {1, 5, 10, 25, 50}; int n; int d[MAXN]; int main(){ #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); #endif d[0] = 1; for(int i=0; i<TYPE; i++) { for(int j=1; j<MAXN-1; j++) { if(j>=coins[i]) d[j] += d[j-coins[i]]; } } while(scanf("%d", &n) == 1) { printf("%d\n", d ); } return 0; }
相关文章推荐
- 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 + 完全背包)
- uva674 - Coin Change(dp)
- UVA 674 Coin Change 钱币兑换问题 类似完全背包
- UVa 674 - Coin Change
- uva674 - - Coin Change
- Coin Change(UVA 674)
- uva 674 Coin Change (DP)
- uva 674 Coin Change
- uva 674 Coin Change【背包】
- UVA 674 Coin Change
- uva 674 Coin Change