zoukankan      html  css  js  c++  java
  • UVa 674

      题目大意:有5中类型的硬币:1分,5分,10分,25分和50分,现在给你一定数额的金钱n(以分为单位),让你计算有多少中方法可以将这个数额的钱换成硬币,不同次序算同一种,如1,1,5和1,5,1算一种。

      硬币兑换问题,经典DP。可以dp[i]保存换i数额的硬币兑换方法数,如果用dp[i] += dp[i-coin]的递推公式的话计算出的是考虑顺序的兑换方法数,所以分五次转移,这样就可以避免重复。理解的不是太清楚,个人感觉就是构造时按照大小顺序先后构造,只考虑1,1,5的方案,不会计算1,5,1和5,1,1这样的方案。

     1 #include <cstdio>
     2 #include <cstring>
     3 #define MAXN 7490
     4 
     5 int dp[MAXN];
     6 const int coin[5] = {1, 5, 10, 25, 50};
     7 
     8 int main()
     9 {
    10 #ifdef LOCAL
    11     freopen("in", "r", stdin);
    12 #endif
    13     memset(dp, 0, sizeof(dp));
    14     dp[0] = 1;
    15     for (int k = 0; k < 5; k++)
    16         for (int i = 1; i < MAXN; i++)
    17             if (i >= coin[k])
    18                 dp[i] += dp[i-coin[k]];
    19     int n;
    20     while (scanf("%d", &n) != EOF)
    21         printf("%d
    ", dp[n]);
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    oracle比较常用的函数
    生成GUID
    字符串操作
    Visual Studio常用快捷键
    c#保存异常日志
    c#的Trim方法
    c#之文件操作
    Python可视化库matplotlib.pyplot里contour与contourf的区别
    python linspace
    神经网络实现连续型变量的回归预测(python)
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3284552.html
Copyright © 2011-2022 走看看