http://acm.hdu.edu.cn/showproblem.php?pid=1284

钱币兑换问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7265    Accepted Submission(s): 4268

Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
 
Input
每行只有一个正整数N,N小于32768。
 
Output
对应每个输入,输出兑换方法数。
 
Sample Input
2934
12553
 
Sample Output
718831
13137761
 
Author
SmallBeer(CML)
 
Source
 
Recommend
lcy
 

Statistic | Submit | Discuss | Note

Home | Top Hangzhou Dianzi University Online Judge 3.0
Copyright © 2005-2015 HDU ACM Team. All Rights Reserved.
Designer & DeveloperWang Rongtao LinLe GaoJie GanLu
Total 0.002001(s) query 2, Server time : 2015-05-28 22:32:58, Gzip enabled
Administration
 #include<iostream>
#include<cstdio>
using namespace std;
int dp[];
int main()
{
int a[]= {,,,};
dp[]=;
for(int i=; i<=; i++)
{
for(int j=i; j<; j++)
{
dp[j]+=dp[j-a[i]];//为什么要dp[j-a[i]],因为每次执行这一步,都是假设再用一枚当前硬币,所以要加上减去这枚硬币以后的钱数的方法数
}
}
int n;
while(scanf("%d",&n)!=EOF)
cout<<dp[n]<<"\n";
return ;
} /*
方法2:
转:
思路:首先看能兑换多少个三分硬币的,然后当三分硬币分别为1,2,3,.... n时有多少
个2分硬币的,为什么要这样确定了?因为只要还可以兑换出三分硬币和二分硬币的那么
剩下的价值一定可以让价值为1的硬币塞满。开头为什么s为N/3+1呢?因为可以这样想,
假设N=7,那么只包含3分硬币和1分硬币的组合方式为:3,3,1; 3,1,1,1,1;
所以N/3是实际上可以容纳三分硬币的个数。而增加1是因为可以全部换成1分的硬币。
有人会疑问,那么t = (N-3*i)/2不是会重复吗?这是不可能的,因为硬币的价值是递
增的,只有当i的值为N/3时,t的值可以为0或者1。所以不会重复。
*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int N;
int main()
{
while(~scanf("%d", &N))
{
int s = N/+;
for(int i = ; i <= N/ ; i++)
{
int t = (N-*i)/;
s += t;
}
printf("%d\n", s);
}
return ;
} /*方法3:(母函数)
题目的意思就是说给你三种面值的币分别是1分、2分、3分,那么问你一个钱数n有几种方案可以拼凑得到这个钱数n?
这道题还是比较好看的,我们根据母函数的定义,以及多项式的每一项和系数所表示的含义,我们可以定义母函数G(x)=(1+x+x^2+x^3--------)*(1+x^2+x^4+x^6+x^8--------)*(1+x^3+x^6+x^9--------------),那么我们使用母函数的额展开式对应的指数就是能表示的钱币数,系数就是表示该钱币数的方案数。
所以问题就是求出对应的n的系数就可以了,这个比较简单,就是模拟手工多项式的展开, */
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int Max=;
int ans[Max];
int tans[Max];
int main()
{
int i,j,n;
for(int i=; i<Max; i++)
ans[i]=;
memset(tans,,sizeof(tans));
for(int k=; k<=; k++)
{
for(i=; i<Max; i++)
{
for(j=; i+j<Max; j+=k)
{
tans[i+j]+=ans[i];
}
}
for(i=; i<Max; i++)
{
ans[i]=tans[i];
tans[i]=;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",ans[n]);
}
return ;
}

hdu 1284完全背包的更多相关文章

  1. HDU 1284 钱币兑换问题(全然背包:入门题)

    HDU 1284 钱币兑换问题(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1284 题意: 在一个国家仅有1分,2分.3分硬币,将钱N ( ...

  2. HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包)

    HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包) 题意分析 裸的完全背包问题 代码总览 #include <iostream> #include <cstdio> ...

  3. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  4. hdu 5445 多重背包

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  5. hdu 1203 01背包 I need a offer

    hdu 1203  01背包  I need a offer 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题目大意:给你每个学校得到offe ...

  6. HDU 1284 钱币兑换问题 母函数、DP

    题目链接:HDU 1284 钱币兑换问题 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  7. hdu 1284 钱币兑换问题 完全背包

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284 递推公式:dp[i] = sum(dp[i], dp[i-C]) /* 钱币兑换问题 Time ...

  8. HDU 1284(钱币兑换 背包/母函数)

    与 HDU 1028 相似的题目. 方法一:完全背包. 限制条件:硬币总值不超过 n. 目标:求出组合种数. 令 dp[ i ][ j ] == x 表示用前 i 种硬币组合价值为 j 的钱共 x 种 ...

  9. 【完全背包】HDU 1284 钱币兑换问题

    Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Out ...

随机推荐

  1. EditText的一些属性及用法

    EditText的一些属性及用法设置当EditText获得焦点时把文本框的内容全选中android:selectAllOnFocus="true"设置某个EditText默认获得焦 ...

  2. POJ 1637 Sightseeing tour (混合图欧拉回路)

    Sightseeing tour   Description The city executive board in Lund wants to construct a sightseeing tou ...

  3. IE浏览器打开f12才正常

    IE浏览器打开f12才正常,最后发现是js中有向控制台打log的语句,程序执行到这些语句就不走了,去掉这些语句就好了!

  4. 关于hql一些不常见但好用的技巧(个人总结)

    最近一直在用spring-data-jpa这个东西,感觉方法上注解hql语句已经是很常用的方法了, 有一些关于hql的经验分享一下: 一.hql的join hql的优势就是直接的关联关系嘛,但是通过h ...

  5. Z Fighting Problem

    Here is a video about unity depth shader workarounds: http://www.burgzergarcade.com/tutorials/game-e ...

  6. jQuery的动画队列

    动画队列主要用到jQuery的queue.dequeue和clearqueue. 1.queue()函数主要是将一个动画函数数组绑定到一个队列上 2.dequeue()函数主要是执行队列的第一个函数, ...

  7. Swift 遍历数组元素

    ..<Array.count { Array[index] } for (index, element) in Array.enumerate() { print(("\(index+ ...

  8. centos6搭建VPN

    1,检查是否开启PPP #cat /dev/ppp cat: /dev/ppp: No such device or address //表示已经开启 2,安装ppp和iptables #yum in ...

  9. Hibernate缓存之初探

    数据层的访问效率优化可能第一想到的就是利用缓存,缓存的机能可以简单理解为将从数据库中访问的数据放在内存中,在以后再次使用到这些数据时可以直接从内存中读取而不必要再次访问数据库,尽量减少和数据库的交互提 ...

  10. NET Framework 4.0的安装失败处理

    如果是XP系统,这么做:1.开始——运行——输入cmd——回车——在打开的窗口中输入net stop WuAuServ2.开始——运行——输入%windir%3.在打开的窗口中有个文件夹叫Softwa ...