zoukankan      html  css  js  c++  java
  • uva674Coin Change

    题意:手中的硬币币值有1,5,10,25,50共5种,给定一个面值n,问把n兑换成硬币的方案总数是多少。

    分析:先打表,再输入输出。动态规划的简单题目,设dp[i]表示面值为i的情况下能兑换的种类,那么dp[i]=sigma(dp[i-v[j]]), j=0..4, v[j]={1,5,10,25,50};也就是,如果i大于v[j],说明能够用dp[i-v[j]]的方案再加上一枚面值为v[j]的硬币作为面值i的方案,不过这只是方案中硬币的数量多了一枚,题目中只是问方案数量,那么此时两者在方案数量上等价,那么方案总数上加上这一种情况就可以了。

    代码:

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 using namespace std;
     5 #define DEBUG
     6 const int MAXN = 7500;
     7 int dp[MAXN];
     8 int main(){
     9 #ifndef DEBUG
    10     freopen("in.txt", "r", stdin);
    11 #endif
    12     int i, j;
    13     int v[5] = {1, 5, 10, 25, 50};
    14     memset(dp, 0, sizeof dp);
    15     dp[0] = 1;
    16     for(i=0; i<5; i++)
    17         for(j=1; j<MAXN; j++)
    18             if(j>=v[i]) dp[j]+=dp[j-v[i]];
    19     int n;
    20     while(scanf("%d", &n)!=EOF) printf("%d\n", dp[n]);
    21     return 0;
    22 }
    Greatness is never a given, it must be earned.
  • 相关阅读:
    hud 1397
    hdu 1211
    hdu 1124
    hdu 1104
    1788
    hdu 1796
    sdut 2169
    hdu 1019
    $http post 取不到数据
    sql
  • 原文地址:https://www.cnblogs.com/zjutzz/p/2910733.html
Copyright © 2011-2022 走看看