博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdu 2069 Coin Change
阅读量:5102 次
发布时间:2019-06-13

本文共 1653 字,大约阅读时间需要 5 分钟。

Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=2069

一道生成函数的题;

若对生成函数不理解,推荐看一下文章:http://www.matrix67.com/blog/archives/120

相比于普通的生成函数,她没有在每种硬币的数量是做限制,而是在硬币的总数上做了限制: Your program should be able to handle up to 100 coins.

意思就是题中所给的5种硬币的总和不能超过100;

所以在计算过程中需要对硬币的数量采取控制;

用数组c1[][],c2[][],存储系数,每个数组中一个[]填硬币总数量,一个[]填硬币总面值。

 

在敲代码时,我思考过对某些变量的顺序问题,但经过实验,在这题中,某些变量的顺序不是特别重要;

以下两个代码的思路是一样的,只是有些变量顺序是不一样的,供参考。

#include 
#include
using namespace std;const int up=100;const int maxn = 250;int c1[up+10][maxn+10];int c2[up+10][maxn+10];int res[maxn+10];int coins[5]={1,5,10,25,50};int main(){ memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); c1[0][0]=1; int i,j,k,l; for( i=0;i<5;i++ ){ for(l=0;l<=up;l++) for( j=0;j<=maxn;j++ ) for( k=0;k*coins[i]+j<=maxn;k++ ) if( l+k<=up ) c2[ l+k ][ j+k*coins[i] ] += c1[l][j]; for( l=0;l<=up;l++ ) for( j=0;j<=maxn;j++ ){ c1[l][j]=c2[l][j]; c2[l][j]=0; } } for(i=0;i<=maxn;i++){ res[i]=0; for( j=0;j<=up;j++ ) res[i] += c1[j][i]; } int T; while(cin>>T){ cout<
<

 

#include 
#include
using namespace std;const int maxn = 250+20;const int up = 100+10;int c1[maxn][up];int c2[maxn][up];int res[maxn];int coins[5]={ 1,5,10,25,50 };int main(){ memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); int i,j,k,l; /*for( i=0;i
>T ){ cout<
<

 

转载于:https://www.cnblogs.com/Emerald/p/3971945.html

你可能感兴趣的文章
玩转JavaScript OOP[0]——基础类型
查看>>
实验四
查看>>
Hibernate工作原理及为什么要用?
查看>>
【机器学习】EM算法详细推导和讲解
查看>>
大话卷积
查看>>
第三次作业 词频统计
查看>>
hdu4501——小明系列故事——买年货(多维背包)
查看>>
javascript 中XMLHttpRequest 实现前台向后台的交互
查看>>
创建Web Service后,客户端不能调用的解决办法(提示:此方法只有在本地才可以使用)...
查看>>
【练习】Java实现的杨辉三角形控制台输出
查看>>
RabbitMQ 概念
查看>>
java IO之PrintStream和PrintWriter
查看>>
NOI题库--砝码称重V2(多重背包2^n拆分)
查看>>
【BZOJ-1324】Exca王者之剑 最小割
查看>>
js基础练习:实现资料查找
查看>>
CAM(内容可寻址存储器)的认知
查看>>
Alpha 冲刺 (2/10)
查看>>
[BZOJ1999][codevs1167][Noip2007]Core树网的核
查看>>
据说有99%的人都会做错的面试题
查看>>
Java过滤emoji表情,找出emoji的unicode范围。
查看>>