• 找零钱(母函数)


    Description

    我们知道人民币有1、2、5、10、20、50、100这几种面值。 现在给你 n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。 比如4元,能用4张1元、2张1元和1张2元、2张 2元,三种表示方法。

    Input

    输入有多组,每组一行,为一个整合n。 输入以0结束。

    Output

    输出该面额有几种表示方法。

    Sample Input

    1
    4
    0

    Sample Output

    1
    3

    解题思路:这一道题如果不是必须使用母函数的话可以有很多种解法,比如记忆化搜索,动态规划等等,这道题和一般的母函数模板不同的地方在于限制了钞票
    的数量,而母函数却没有考虑过这个问题,所以就需要给b数组增加一个维度来限制钞票张数不超过100。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #define ll long long int
     6 #define MAX 17
     7 #define N 255
     8 using namespace std;
     9 int a[N][N];
    10 int b[N][N];
    11 int ans[N];
    12 int v[]= {1,2,5,10,20,50,100};
    13 void init()///打表
    14 {
    15     int i,j,k,l;
    16     a[0][0]=1;
    17     for (i=0; i<7; i++)///面值
    18     {
    19         for (j=0; j*v[i]<N; j++)///步长
    20         {
    21             for (k=0; k+j*v[i]<N; k++)///从x^0到x^N遍历一遍
    22             {
    23                 for(l=0; l+j<=100; l++)///钞票数量
    24                 {
    25                     b[j*v[i]+k][l+j]+=a[k][l];
    26                 }
    27             }
    28         }
    29         for (j=0; j<N; j++)
    30         {
    31             for(k=0; k<N; k++)
    32             {
    33                 a[j][k]=b[j][k];
    34                 b[j][k]=0;
    35             }
    36         }
    37     }
    38     for(i=0;i<N;i++)///转换
    39     {
    40         for(j=0;j<=100;j++)
    41         {
    42             ans[i]+=a[i][j];
    43         }
    44     }
    45 }
    46 int main()
    47 {
    48     int n;
    49     init();
    50     while(scanf("%d",&n)!=EOF)
    51     {
    52         if(n==0)
    53         {
    54             break;
    55         }
    56         printf("%d
    ",ans[n]);
    57     }
    58     return 0;
    59 }
    
    
    


  • 相关阅读:
    【CSP模拟赛】益智游戏(最短路(DJSPFA)&拓扑排序)
    【CSP模拟赛】仔细的检查(树的重心&树hash)
    【CSP模拟赛】奇怪的队列(树状数组 &二分&贪心)
    【洛谷】P1275 魔板(暴力&思维)
    【CSP模拟赛】方程(数学)
    【洛谷】P3177 [HAOI2015]树上染色
    【洛谷】P3188 [HNOI2007]梦幻岛宝珠
    方法重载(一)
    找最大值
    java 冒泡排序
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9745156.html
Copyright © 2020-2023  润新知