题目:传送门

题目描述

整数划分是一个非常经典的数学问题。
所谓整数划分,是指把一个正整数n写成为n=m1+m2+...+mi的形式,其中mi为正整数,并且1<=mi<=n,此时,{m1, m2, ..., mi}为n的一个划分。如果{m1, m2, ..., mi}中的最大值不超过m,即max{m1, m2, ..., mi}<=m,那么我们称之为整数n的一个m划分。
现在给出你正整数n和m,请你输出n的m划分的数量。
例如,当n=4时,有5个划分,即{4}, {3,1}, {2,2}, {2,1,1}, {1,1,1,1}。
注意,4=1+3和4=3+1被认为是同一个划分。

输入

 输入文件以EOF结束。

每组数据占一行,有两个正整数n和m。(n,m<=50)

输出

 输出n的m划分的数量。

示例输入

4 4

示例输出

5

在比赛时通过做这题,明显发现了自己的不足,学过的知识理解的不透彻,明知道这题是神奇的换零钱的模板,但是没有推出来公式,还好我在模板里面找到了这题,1A。

代码如下:
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
#include <stack>
#define inf 0x3f3f3f3f
#include <stdio.h>
#include <string.h>
typedef long long ll;
#define mod 10000007
#define eps 1e-9
using namespace std;
int n,m,dp[];
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
m=min(m,n);
memset(dp,,sizeof(dp));
dp[]=;
for(int i=;i<=m;i++)
{
for(int j=i;j<=n;j++)
{
dp[j]+=dp[j-i];
}
}
printf("%d\n",dp[n]);
}
return ;
}
递归暴力的方法:

如下:

根据n和m的关系,考虑一下几种情况:

(一)当n=1时,无论m的值为多少(m>0),只有一种划分,即{1}。

(二)当m=1时,无论n的值为多少,只有一种划分,即n个1,{ 1,1,…,1}。

(三)当n=m时,根据划分中是否包含n,可以分为一下两种情况:

(1)划分中包含n的情况,只有一个,即{n}。

(2)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有(n-1)划分。

因此f(n,n)=1+f(n,n-1)。

(四)当n<m时,由于划分中不可能出现负数,因此就相当于f(n,n)。

(五)当n>m时,根据划分中是否包含最大值m,可以分为以下两种情况:

(1)划分中包含m的情况,即{m, {x1,x2,…,xi}},其中{x1,x2,…,xi}的和为n-m,因此这种情况下为f(n-m,m)。

(2)划分中不包含m的情况,则划分中所有值都比m小,即n的(m-1)划分,个数为f(n,m-1)。

因此f(n,m)=f(n-m,m)+f(n,m-1)。


SDUT3145:Integer division 1(换零钱背包)的更多相关文章

  1. 51nod 1101 换零钱 【完全背包变形/无限件可取】

    1101 换零钱  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 ...

  2. 子集和问题(应用--换零钱)POJ2229:Sumsets

    我一直在纠结换零钱这一类型的题目,今天好好絮叨一下,可以说他是背包的应用,也可以说他是单纯的dp.暂且称他为dp吧. 先上一道模板题目. sdut2777: 小P的故事——神奇的换零钱 题目描述 已知 ...

  3. DP优化与换零钱问题

    1 当贪心不再起效的时候 对于换零钱问题,最简单也是性能最好的方法就是贪心算法.可是贪心算法一定要满足面值相邻两个零钱至少为二倍关系的前提条件.例如1,2,5,10,20……这样的零钱组应用贪心最简单 ...

  4. SICP 换零钱的迭代版本

    看到换零钱方式统计这里, 书中给出了递归的实现但没有给出迭代版本说要留给读者作为挑战, 既然说是作为挑战那肯定是能解决的,在想了一天无果之后最终在别人博客的帮助下终于实现了迭代的版本...也算是经历坎 ...

  5. 小P的故事——神奇的换零钱&&人活着系列之平方数

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2777&cid=1219 这题不会,看了别人的代码 #include <iostre ...

  6. Why Python's Integer Division Floors ---- python int(6/-132)时答案不一致,向下取整

    leetcode150题中有一个步骤: int(6/-132) == 0 or ==-1? 在自己本地python3环境跑是int(6/-132) =0,但是提交的时候确实-1. 查找相关资料解惑: ...

  7. 51 Nod 1101 换零钱(动态规划好题)

    1101 换零钱  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 ...

  8. DeepFaceLab报错,integer division or modulo by zero

    DeepFaceLab的集成环境在众多换脸软件中是做的最好的.但是使用过程也会出现一些错误,主要的错误有两个,一个是你配置太低OOM了,主要体现显存太低.第二个是版本不对应.比如你原先用的cuda9. ...

  9. 51nod 1101换零钱(背包)

    N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元.   例如:5分钱换为零钱,有以下4种换法: 1.5个1分 2.1个2分3个1分 3.2个 ...

随机推荐

  1. postgresql data数据目录路径迁移

    默认的数据库路径是/var/lib/pgsql/9.x/data 将现有的数据库文件全部拷贝到新的数据库路径下,然后重启 新建一个路径作为新的数据库数据路径,假如是/home/data sudo mk ...

  2. 工具类之Mutex

    Mutex在Android4.4的源代码包的./system/core/include/utils/Mutex.h中定义并且实现. 我们先复习一下Mutex在Linux中功能: Mutex出生的意义就 ...

  3. php -- php数组相关函数

    array range ( mixed $low , mixed $high [, number $step ] ) 创建一个连续的数组 range('a','z'); foreach (range( ...

  4. 【BZOJ】1697: [Usaco2007 Feb]Cow Sorting牛排序(置换群)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1697 置换群T_T_T_T_T_T_T 很久以前在黑书和白书都看过,,,但是看不懂... 然后找了本 ...

  5. error: Please reinstall the libcurl distribution - easy.h should be in &lt;curl-dir&gt;/include/curl/

    运行php-5.3.10 --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --e ...

  6. 360破解大赛crackme分析--之3DES解密附加数据

    具体的分析这里有.本人仅仅是对这里面有趣的算法进行了一些学习 分析链接 这次是逆向的使用3DES解密的过程中的内容: 使用微软的crypt库 使用3DES解密程序中的附加数据 代码: VOID enc ...

  7. hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)

    Area Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. hdu 3336:Count the string(数据结构,串,KMP算法)

    Count the string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)

    类型别名(typeAliases):     作用:通过一个简单的别名来表示一个冗长的类型,这样可以降低复杂度.    类型别名标签typeAliases中可以包含多个typeAlias,如下 < ...

  10. 一稿设计多端适配优雅的解决方案 - rem

    规范目的 为提高前端团队开发效率,输出高质量的前端页面代码,提高UI设计还原度,特编写该规范文档.本文档如有不对或者不合适的地方请及时提出. JS代码块 (function (doc, win) { ...