这道题目的递归思想和第一个题差不多, 主要思想是:func(n, m)的作用是将n划分为m个。

1. 如果n < m 的时候肯定是不能划分的,所以就返回0

2. 如果m = 1 或者 n = m 的时候,就一种划分方式

3. 如果n > m 的时候, 分为两种情况,一个是划分数中含有1, 一个是不含1, 所以含有1 的个数为func(n - 1, m - 1),意思就是从n去掉1,然后再划分m - 1个, 下面就是不含1的,

func(n - m, m), 这个式子的意思为, 先取出m个1来, 这样的话再将剩下的数,也就是n-m继续划分m个, 然后再把n - m个1加上去,肯定都是大于1的。所以式子为func(n - 1, m -1) + func(n - m, m);

代码如下(递归):

 #include <stdio.h>

 int func(int n, int m)
{
if(n < m)//n < m的时候肯定不能分, 所以返回0
return ;
if(m == || n == m)
return ;
else//此步是含1和不含1
return func(n - , m - ) + func(n - m, m);
}
int main()
{
int t, n, m;
scanf("%d", &t);
for(int i = ; i < t; i++)
{
scanf("%d %d", &n, &m);
printf("%d\n", func(n, m));
} return ;
}

递推式已经出来了,所以可以用dp来做,其中数组dp[n][m]的值就代表n 划分 m 份时的数量, 也就是题目让求的拆分方法的数目,第一层for循环是从1-110个数的划分是多少,第二层是每个数的对应j个拆分方法的数目是多少, 所以最后找n 拆成m 个方法的数目就是dp[n][m];

代码如下(dp):

 #include <stdio.h>
#include <string.h> const int MAX = ;
int main()
{
int a[MAX][MAX];
memset(a, , sizeof(a));
a[][] = ;
for(int i = ; i < MAX; i++)
{
for(int j = ; j <= i; j++)
a[i][j] = a[i - ][j - ] + a[i - j][j];
}
int t1, t2, t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &t1, &t2);
printf("%d\n", a[t1][t2]);
}
return ;
}

题目279就不能用递归的方法来做了, 毕竟数据比这个大了,只能用第二种方法来做了。只要把第二种方法的MAX改一下就行了

递归---NYOJ-176 整数划分(二)和NYOJ-279队花的烦恼二的更多相关文章

  1. nyoj_176_队花的烦恼二_201404262008

    队花的烦恼二 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 ACM队队花C小+最近在X大OJ上做题,竟发现了一道做不出来的…水题!她快郁闷死了……也许是最近状态不太 ...

  2. nyoj 90 整数划分

    点击打开链接 整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥ ...

  3. NYOJ 275 队花的烦恼一

    队花的烦恼一 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描写叙述 ACM队的队花C小+常常抱怨:"C语言中的格式输出中有十六.十.八进制输出,然而却没有二进制输 ...

  4. 整数划分 Integer Partition(二)

    本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合 ...

  5. NYOJ90 整数划分(经典递归和dp)

    整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,  其中n1≥n2≥…≥nk≥1,k≥1.  正 ...

  6. nyoj_176_整数划分(二)_201404261715

    整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 ...

  7. NYOJ 746---整数划分(四)(区间DP)

    题目链接 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经 ...

  8. 整数划分 Integer Partition(一)

    话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...

  9. NYOJ-571 整数划分(三)

    此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...

随机推荐

  1. sql语句去除重复记录(多表连接的查询)

    --处理表重复记录(查询和删除) /********************************************************************************** ...

  2. Flask 快速入门

    最简单的flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...

  3. C++的类为什么要用指针

    这个问题原来是这样的: C++的对象和C#不同,C++的对象是放在栈区的,C#的对象是引用类型. 这就意味着,C++进行类型转换的时候,由于调用了复制构造函数,其转换后,对象会丢弃一部分信息. 派生类 ...

  4. winform 绘制label 中文字 - 摘

    private void label2_Paint(object sender, PaintEventArgs e) {//绘制label中文字 string text = "Sri Lan ...

  5. spring注解机制和XML配置机制之间的比较

    XML配置的优缺点: 优点有:1. XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新编译.2. 在处理大的业务量的时候,用XML配置应该更加好一 ...

  6. 网络流的一个很厉害的ppt

    链接: http://pan.baidu.com/s/1dECtMpz 密码: hdbm

  7. mongose排序查询

    Kc.find({bjid:req.params.bjid}).sort({'_id':1}).exec(function(err,kcs){ if(err){ res.json({no:0,msg: ...

  8. 玩玩SPARK

    没有SCALA的东东,玩不起哈. ./spark-shell 从文件生成一个DRIVER? val logFile = sc.textFile("hdfs://192.168.14.51:9 ...

  9. CMOS和TTL的區別

    TTL電路是晶體管-晶體管邏輯電路的英文縮寫(Transister-Transister-Logic ),是數字集成電路的一大門類.它采用雙極型工藝制造,具有高速度低功耗和品種多等特點. CMOS是: ...

  10. 利用NativeWindow监视WndProc消息(好像是一个字典,没搞明白)

    http://blog.csdn.net/lovefootball/article/details/1784882 在写Windows应用程序的时候,经常会碰到需要修改例如MessageBox或者Fi ...