zoukankan      html  css  js  c++  java
  • 每日编程-20170327

     有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。

    给定一个int n,请返回n分有几种表示法。
    保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。

    测试样例:
    6

    返回:2

    解答:

    硬币问题直接使用动态规划的算法,我是在这里学习的该方法,有详细的解答。

    下面是我按照连接的方法写的动态规划算法。

     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 alcCoinNoR(const vector<int> &coins, int sum) {
     6     vector<int> tmpV2(sum + 1, 0);
     7     vector<vector<int>> dp(coins.size() + 1, tmpV2);
     8     for (size_t i = 0; i <= coins.size(); i++)
     9     {
    10         dp[i][0] = 1;
    11     }
    12     for (size_t i = 1; i <= coins.size(); i++)
    13     {
    14         for (size_t j = 1; j <= sum; j++)
    15         {
    16             for (size_t k = 0; k <= j / coins[i - 1]; k++)
    17             {
    18                 dp[i][j] += dp[i - 1][j - k*coins[i - 1]];
    19             }
    20         }
    21     }
    22     return dp[coins.size()][sum];
    23 }
    24 int main() {
    25     int n;
    26     while (cin >> n)
    27     {
    28         vector<int> coins = { 1,5,10,25 };
    29         cout << (n < 0 ? (-1) : (calcCoinNoR(coins, n)))% 1000000007 << endl;
    30     }
    31 }
  • 相关阅读:
    Linux Shell tr 命令详解
    Shell统计每个单词出现的个数
    启明4-29团队进度博客
    启明4-28团队进度博客
    启明4-27团队进度博客
    启明4-26团队进度博客
    启明4-25团队进度博客
    启明4-24团队博客
    每日总结8
    启明4-23团队进度博客
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6628466.html
Copyright © 2011-2022 走看看