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. 使用jquery form插件进行异步带文件的表单提交

    引入form插件与jquery 的js文件后 获取表单的jq对象 然后.ajaxSubmit提交表单即可 实现添加品牌的异步表单提交 function addBarandImg(formId) { $ ...

  2. Photoshop 使用曲线

    曲线表示的是图像的明度, 通过信息办的 HSB 信息可以看到调整曲线时整个图像明度的变化 曲线的左下角表示图片的暗部, 右下角表示图片的高光部 而曲线本身的纵坐标则表示这个部分的明度, 例如将曲线的左 ...

  3. Android NDK构建资料

    Cmake http://blog.csdn.net/u012527560/article/details/51752070  http://wenku.baidu.com/link?url=ENJF ...

  4. c#开发Mongo笔记第二篇

    写到第二篇不得不说是我之前犯了一个小错误,其实实现子表存储也是很简单的事,先说我想实现什么样的效果吧 就是用户表里有个成绩字段,成绩字段是个子表 其实实现这个功能也很简单,用面向对象的思想很好理解,子 ...

  5. 前端利器:SASS基础与Compass入门

    SASS是Syntactically Awesome Stylesheete Sass的缩写,它是css的一个开发工具,提供了很多便利和简单的语法,让css看起来更像是一门语言,这种特性也被称为“cs ...

  6. 与jquery serializeArray()一起使用的函数,主要来方便提交表单

    <script> $(function() { $("#butsubmit").click(function() { var data = convertArray($ ...

  7. c# 抓取Web网页数据分析

    通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序.比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名.分析系统在根据得到的数据进行数据分析.为业务提供参考数据. 为了完成以上的需求,我们 ...

  8. 【乔布斯05年斯坦福大学毕业典礼上的演讲】——Stay Hungry, Stay Foolish.(转)

    Steve Jobs: Commencement Address at Stanford University "Stay Hungry, Stay Foolish." 求知若饥, ...

  9. Keil的标题“礦ision3" 的改变(转)

    MDK 的标题显示成 “礦ision3",前面的这个不是u而是一个希腊字母“缪”,在中文显示中出现问题,半个汉字. 可以使用如下方法取消. 一: 光标问题 Keil uv3 中会出现光标定位 ...

  10. 《Linux内核设计与实现》读书笔记(十四)- 块I/O层

    最近太忙,居然过了2个月才更新第十四章.... 主要内容: 块设备简介 内核访问块设备的方法 内核I/O调度程序 1. 块设备简介 I/O设备主要有2类: 字符设备:只能顺序读写设备中的内容,比如 串 ...