• UVA 357 Let Me Count The Ways


      其实同种类型的题我不想重复发的,感觉没意思。这题又是硬币问题,和147、674原理一样。只是我在做这题时遇到了新的问题,也算是有新的收获,就发一下吧。我曾和zxpn讨论过是之前就算好所有结果,还是每输入一个就计算一个效率高。当时我认为肯定是输一个算一个好,因为把所有的都算出来,并不是每个都会用的,也算一种浪费;而DP时用记忆化搜索会保存每次调用的所有数,如果下次也要调用的话就不必再算了,明显更好。今天遇到这题DP不行了,原因是数很大时用递归形式的DP会导致栈溢出。下面是代码:

     1 #include<stdio.h>
    2 typedef long long int llg;
    3 #define MAXN 30010
    4 llg f[MAXN][6];
    5 int coin[] = {1,5,10,25,50};
    6 int main()
    7 {
    8 int a,i,j;
    9 llg ans;
    10 for(i = 0; i < MAXN; i++)
    11 for(j = 0; j < 5; j++)
    12 {
    13 f[i][j] = 1;
    14 for(int k = 1; k <= j && i >= coin[k]; k++)
    15 f[i][j] += f[i-coin[k]][k];
    16 }
    17 while(scanf("%d",&a)==1)
    18 {
    19 ans = f[a][4];
    20 if(ans != 1)
    21 printf("There are %lld ways to produce %d cents change.\n",ans,a);
    22 else
    23 printf("There is only 1 way to produce %d cents change.\n",a);
    24 }
    25 return 0;
    26 }
  • 相关阅读:
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    软件开发文档与工具的安装与使用
    ATM管理系统
    活动图与流程图
    四则运算
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 K-近邻算法及应用
    实验一 感知器及其应用
  • 原文地址:https://www.cnblogs.com/lzxskjo/p/2437919.html
Copyright © 2020-2023  润新知