hdu(2069)——Coin Change
来源:互联网 发布:千牛淘宝助手在哪里 编辑:程序博客网 时间:2024/04/30 05:03
题意:
现在有价值为n的硬币,然后你有1,5,10,25,50的小硬币。然后问你有多少种方法可以找回价值为n的硬币。注意最多只能使用100个硬币,然后当n=0时,输出只有一种方案。
思路:
因为这里最多只能使用100个硬币,所以我们需要增加一维来限制状态。因为第一维限制的是硬币的价值嘛。
所以设为c1[maxn][100],c2[maxn][100]。
唯一要注意的就是要多加一层for循环来控制硬币的数量嘛。
然后就好啦~~
#include<cstdio>#include<cstring>#include<map>#include<set>#include<cmath>#include<algorithm>#include<vector>#include<queue>#include<stack>#include<iostream>using namespace std;typedef __int64 ll;typedef unsigned __int64 ULL;#define inf 99999999#define maxn 300int v[7];ll c1[maxn][110],c2[maxn][110];int main(){ int n; v[1]=1; v[2]=5; v[3]=10; v[4]=25; v[5]=50; while(~scanf("%d",&n)){ memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); if(n==0){ printf("1\n"); continue; } for(int i=0;i<=100;i++){ c1[i][i]=1; } for(int i=2;i<=5;i++){ for(int j=0;j<=n;j++){ for(int k=0;k+j<=n;k+=v[i]){ for(int l=0;l+(k/v[i])<=100;l++){ c2[j+k][l+k/v[i]]+=c1[j][l]; } } } for(int j=0;j<=n;j++){ for(int l=0;l<=100;l++){ c1[j][l]=c2[j][l]; c2[j][l]=0; } } } ll ans=0; for(int i=0;i<=100;i++){ ans+=c1[n][i]; } printf("%I64d\n",ans); } return 0;}
0 0
- hdu(2069)——Coin Change
- HDU 2069 —— Coin Change
- HDU 2069 Coin Change
- hdu 2069 Coin Change
- HDU 2069 Coin Change
- HDU 2069 Coin Change
- hdu 2069 Coin Change
- HDU 2069 Coin Change
- hdu 2069 Coin Change
- hdu 2069 Coin Change
- hdu-2069-Coin Change
- HDU 2069 Coin Change
- hdu---2069Coin Change
- HDU 2069 Coin Change
- HDU 2069 Coin Change
- HDU-2069-Coin Change
- hdu 2069 Coin Change
- HDU#2069: Coin Change
- 【NYOJ】[94]cigarettes
- Ugly Number II
- source Insight 注册码
- Android中Context详解 ---- 你所不知道的Context
- 【Python】给pypy安装第三方库
- hdu(2069)——Coin Change
- Codeforces 617E XOR and Favorite Number
- Java poi excel 此文件中某些文本格式可能已经更改
- 我这是一条什么路
- 一个数列的通项公式
- byte2hex
- Hadoop 之 数据流——客户端与HDFS,namenode和datanode 之间的数据流
- 虚拟机挂载共享文件夹
- Android开发请求网络方式详解