解题心得:

(青蛙跳台阶:有n阶台阶,青蛙可以一次跳一阶也可以一次跳两阶,问总共有多好中跳法)

1、之前把这个问题的思路弄错了,以为是递推,就像青蛙跳台阶,用斐波那契求解。但是用斐波那契肯定会超范围。反过来想自己的思路其实是错的。青蛙跳台阶其实要区分顺序,比如三级台阶,先跳两级再跳一级和先跳两级再跳一级是两种不同的方法,但是钱币问题两分和一分都可以凑成三分钱但是不分先后顺序。

2、凑硬币有三种算法,先说第一种。第一种就是完全背包问题,动态规划,一元的只有一种凑法,全是一元的,然后规划二元的,将两个一元的可以用一个一元的代换,所以可以代换一个一元的就多一种凑法,因为可以选择替换或者不替换,再逐步扩大钱数就可以了,三元的同上。

3、第二种算法,和第一种比较相似,只不过先是凑的三元的,所以先看可以凑多少个三元的,n/3种不够的直接用一来填补就行了,n/3+1,+1部分就是全用一元的来组成的情况。然后就是逐步减去i个三元用二元来代替,思想方法同第二种,加起来就行了

题目

钱币兑换问题

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): 3261 Accepted Submission(s): 1842

Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。

Input
每行只有一个正整数N,N小于32768。

Output
对应每个输入,输出兑换方法数。

Sample Input
2934
12553

Sample Output
718831
13137761

Author
SmallBeer(CML)

Source




方法一:
#include<stdio.h>
#include<cstring>
long long num[32770];
int main()
{
memset(num,0,sizeof(num));
num[0] = 1;
for(int i=1;i<=3;i++)
for(int j=i;j<=32768;j++)
num[j] += num[j-i];
int n;
while(~scanf("%d",&n))
{
printf("%lld\n",num[n]);
}
}
方法二:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
long long sum = 0;
sum = n/3 + 1;
for(int i=0;i<=n/3;i++)
{
int t = (n-i*3)/2;
sum += t;
}
printf("%lld\n",sum);
}
}
方法三:(母函数)

#include<bits/stdc++.h>
using namespace std;
int main()
{
int c1[32770],c2[32770];
int n;
for(int i=0;i<=32768;i++)
{
c1[i] = 1;
c2[i] = 0;
}
for(int i=2;i<=3;i++)
{
for(int j=0;j<=32768;j++)
{
for(int k=0;k+j<=32768;k+=i)
{
c2[k+j] += c1[j];
}
}
for(int k=0;k<=32768;k++)
{
c1[k] = c2[k];
c2[k] = 0;
}
}
while(~scanf("%d",&n))
{
printf("%d\n",c1[n]);
}
}















动态规划:HDU1248-钱币兑换问题的更多相关文章

  1. 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)

    钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...

  2. HDU 1284 钱币兑换问题 (动态规划 背包方案数)

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

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

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

  4. 钱币兑换问题(hd1284)

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

  5. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  6. hdu1284经典钱币兑换问题

    钱币兑换问题. 题目 http://acm.hdu.edu.cn/showproblem.php?pid=1284 完全背包. 这种是求背包问题最多的组合方案 参考了一些资料   http://blo ...

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

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

  8. HDU 1284 钱币兑换问题(普通型 数量无限的母函数)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1284 钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    ...

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

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

  10. hdu 1284 钱币兑换问题 (递推 || DP || 母函数)

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

随机推荐

  1. Android Asynchronous Http Client

    Features Make asynchronous HTTP requests, handle responses in anonymous callbacks HTTP requests happ ...

  2. 父类和子类以及super关键字

    super和this关键字的特点类似:super代表的是父类对象的引用. 当子父类的成员出现同名时,可以通过super来进行区分. 子类的构造方法中,通过super关键字调用父类的构造方法. publ ...

  3. C#中Dictionary泛型集合7种常见的用法

    要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib)  Dictionary的描述1.从一组键(Key)到一组值( ...

  4. C#类型简述

    一.值类型 1.布尔类型 bool,范围 true false 2.整数类型 sbyte,范围 -128~127 byte,范围 0~255 short,范围 -32768~32767 ushort, ...

  5. 【MFC】0xC0000005: 读取位置 0x00000020 时发生访问冲突

    原因:使用GetDlgItem()函数时需要先判断指针然后才可以使用. 错误代码: //重新建一个线程,查询帧同步 DWORD WINAPI SCsync_Thread(LPVOID Lparam) ...

  6. MyBatis源码探索

    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获 ...

  7. LeetCode Add Binary 两个二进制数相加

    class Solution { public: string addBinary(string a, string b) { if(a==""&&b==" ...

  8. java Vamei快速教程11 对象引用

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前一直在使用“对象”这个概念,但没有探讨对象在内存中的具体存储方式.这方面的 ...

  9. World Wind Java开发之十——AnalyticSurface栅格渲染(转)

    http://blog.csdn.net/giser_whu/article/details/43017881 1.AnalyticSurfaceDemo ArcGIS下对栅格的各种分级渲染效果是非常 ...

  10. 2018.6.20 Java考试试题总结(Java语言基础与面向对象编程)最新版

    Java考试试题总结 一.单选题(每题1分 * 50 = 50分) 1.java程序的执行过程中用到一套JDK工具,其中javac.exe指( B ) A.java语言解释器 B.java字节码编译器 ...