递归---NYOJ-176 整数划分(二)和NYOJ-279队花的烦恼二
这道题目的递归思想和第一个题差不多, 主要思想是: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队花的烦恼二的更多相关文章
- nyoj_176_队花的烦恼二_201404262008
队花的烦恼二 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 ACM队队花C小+最近在X大OJ上做题,竟发现了一道做不出来的…水题!她快郁闷死了……也许是最近状态不太 ...
- nyoj 90 整数划分
点击打开链接 整数划分 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥ ...
- NYOJ 275 队花的烦恼一
队花的烦恼一 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描写叙述 ACM队的队花C小+常常抱怨:"C语言中的格式输出中有十六.十.八进制输出,然而却没有二进制输 ...
- 整数划分 Integer Partition(二)
本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中 m1 m2 ... mi连续,比如5=1+4就不符合 ...
- NYOJ90 整数划分(经典递归和dp)
整数划分 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1. 正 ...
- nyoj_176_整数划分(二)_201404261715
整数划分(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 ...
- NYOJ 746---整数划分(四)(区间DP)
题目链接 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经 ...
- 整数划分 Integer Partition(一)
话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...
- NYOJ-571 整数划分(三)
此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...
随机推荐
- underscorejs-where学习
2.7 where 2.7.1 语法: _.where(list, predicate) 2.7.2 说明: 对list集合的每个对象依次与predicate对象进行匹配,返回一个数组(数组为匹配成功 ...
- cxf框架使用(一)
1.创建调用接口 @WebService public interface IQueryBusinessService { public @WebResult(name="QueryBusi ...
- COUNT()函数的使用
COUNT函数 让我们能够数出在表格中有多少笔资料被选出来.它的语法是: SELECT COUNT("栏位名") FROM "表格名" 举例来说, ...
- 【行为型】Iterator模式
迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示.对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供 ...
- python logging模块使用
近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...
- Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)
一.异常处理 python异常: python的运行时错误称作异常 (1)语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 (2)逻辑错误:由于不完整或不合法的输入所致,也可能是逻 ...
- IOS快速开发之常量定义
---恢复内容开始--- 在IOS开发中,有一些方法常常需要用的,但是有很长的方法名,这造成了代码长,写起来累,我们可以通过宏定义了解决这些问题 比如说在代码布局的时候会遇上这样的问题,我们要获取上面 ...
- 堆排序(Heap Sort)的C语言实现
堆排序(Heap Sort)具体步骤为 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆 将顶部元素与堆尾数组交换,此是末尾元素就是最大值, ...
- BeanUtils API中使用ConvertUtils向BeanUtils注册一个日期转换器
ConvertUtils.register(new Converter(){ public Object convert(Class type, Object value){ if(value == ...
- KEIL, a Smart Comliler
KEIL是一个神的编译器.举一二例来说明: 1. 编译器出现WARNING"expression with possibly no effect",是提示你当前语在正做无用功,如在 ...