NYOJ 279 队花的烦恼二和NYOJ 176 整数划分(二)【dp问题或递归】

原创 2012年03月28日 10:23:22

原题链接:点击。。279         点击。。    176     

这两个题 意思基本一样的,就是测试数据的范围不一样。。176数据比较水的,一般不会超时的,但279 你用递归可能就会超时了。。简单讲一下用dp做题的思路吧 。

首先 定义f ( i , j )为整数  i  分成 j  个整数 的情况。。。

经过分析可得f(i, j )可转化为两个部分:

一:  假设 分成的  j  个整数中 不包含1。。那么 此时 f (i-j,j)就是这部分的总情况。。明白吗?再说清楚一点吧。。既然想让他不包含1,就先将j个整数都分为1,此时i变为i-j,再将i分为j个整数,这j个整数再加上原先分的1,就肯定不会再有1出现了。。ok了吧。。

二: 假设分成的j个整数至少有一个1。。那么此时f(i-1,j-1)就是这部分的总情况了。。这点都明白了吧。不明白自己分析一下吧。。

结论:f(i,j)=f(i-j,j)+f(i-1,j-1);动态转移方程有了,实现起来不困难吧。。对了,初始化还有些小技巧。。自己琢磨吧。。还有就是用题上数据范围不是很大得,所以暴力求解会很快的。。

279代码:

 
#include<stdio.h>
int main()
{
	int a,b,n,m,k;
	int ok[505][7]={0};
	ok[1][1]=1;
	for(a=2;a<=500;a++)
	{
		for(b=1;b<=a&&b<=6;b++)
			ok[a][b]=ok[a-b][b]+ok[a-1][b-1];
	}
	while(~scanf("%d%d",&n,&m))
	{	
		printf("%d\n",ok[n][m]);
	}
}        
176代码:

 
#include<stdio.h>
int main()
{
	int a,b,n,m,k;
	int ok[105][105]={0};
	ok[1][1]=1;
	for(a=2;a<=100;a++)
	{
		for(b=1;b<=a;b++)
			ok[a][b]=ok[a-b][b]+ok[a-1][b-1];
	}
	scanf("%d",&k);
	while(k--)
	{
		scanf("%d%d",&n,&m);
		printf("%d\n",ok[n][m]);
	}
}        



nyoj 整数划分(一)(二)

先来谈谈写这两道题的感受,整数划分(一)刚开始做这道题,dp和递归都不会写,是用深搜写的,不过用深搜写 整数划分(二)就不行了,铁定超时。 昨晚和今晚终于把这两道题的递归和dp全看懂了(看别人博客-_...
  • AcmLzq
  • AcmLzq
  • 2016年04月14日 12:59
  • 1121

nyoj 571 整数划分问题(dp)

整数划分(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 整数划分是一个经典的问题。请写一个程序,完成以下要求。   ...
  • y990041769
  • y990041769
  • 2013年03月16日 13:51
  • 5632

NYOJ 1056 部分和问题

部分和问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。 ...
  • briup_acmer
  • briup_acmer
  • 2014年08月04日 16:58
  • 1885

nyoj 176 整数划分(二) 279 队花的烦恼(二)

整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数...
  • u014794992
  • u014794992
  • 2014年04月21日 17:13
  • 481

NYOJ176 整数划分(二)(DP,DFS)

题目: 整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? ...
  • riba2534
  • riba2534
  • 2017年07月12日 17:06
  • 321176

NYOJ 176 整数划分(二)

整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3...
  • qq_35562816
  • qq_35562816
  • 2016年09月03日 08:47
  • 118

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

题目: 整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,  其中n1≥n2≥…≥nk≥...
  • riba2534
  • riba2534
  • 2017年07月12日 15:15
  • 281

NYOJ 176 、POJ 1664 —— m划分为n个正整数的划分个数

整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB  描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 ...
  • AcIsFun
  • AcIsFun
  • 2016年05月18日 21:36
  • 115

nyoj 571 整数划分(三)(递归)

整数划分(三)描述 整数划分是一个经典的问题。请写一个程序,完成以下要求。输入 每组输入是两个整数n和k。(1 ...
  • blessLZH0108
  • blessLZH0108
  • 2017年07月13日 11:11
  • 197

NYOJ90-整数划分,经典递归思想~~

题目数据范围不大,用搜索是可以,但n并不是在10以内,,千万别被他骗了,,,...
  • NYIST_TC_LYQ
  • NYIST_TC_LYQ
  • 2016年03月20日 18:26
  • 620
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NYOJ 279 队花的烦恼二和NYOJ 176 整数划分(二)【dp问题或递归】
举报原因:
原因补充:

(最多只允许输入30个字)