放苹果(poj1664递归)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 24392 | Accepted: 15513 |
Description
Input
Output
Sample Input
- 1
- 7 3
Sample Output
- 8
- ps:http://poj.org/problem?id=1664
题意:略。。。
详见代码。
- /*
- 解题分析:
- 设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,
- 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)
- 当n<=m:不同的放法可以分成两类:
- 1、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);
- 2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).
- 而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
- 递归出口条件说明:
- 当n=1时,所有苹果都必须放在一个盘子里,所以返回1;
- 当没有苹果可放时,定义为1种放法;
- 递归的两条路,第一条n会逐渐减少,终会到达出口n==1;
- 第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0.
- */
- #include<stdio.h>
- int fun(int m,int n) //m个苹果放在n个盘子中共有几种方法
- {
- if(m==||n==) //因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,
- return ; //则可能出现m-n=0的情况从而不能得到正确解
- if(n>m)
- return fun(m,m);
- else
- return fun(m,n-)+fun(m-n,n);
- }
- int main()
- {
- int T,m,n;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d%d",&m,&n);
- printf("%d\n",fun(m,n));
- }
- }
- 我之前的代码,
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- int n,a,b,i,j;
- int arr[][];
- scanf("%d",&n);
- while(n--)
- {
- scanf("%d%d",&a,&b);
- for(i=;i<=a;i++)
- {
- arr[i][]=;
- arr[i][]=;
- }
- for(i=;i<=b;i++)
- {
- arr[][i]=;
- arr[][i]=;
- }
- for(i=;i<=a;i++)//i表示苹果个数
- for(j=;j<=b;j++)//j表示盘子个数
- {
- if(i>=j)
- arr[i][j]=arr[i][j-]+arr[i-j][j];
- else
- arr[i][j]=arr[i][i];//盘子多于苹果个数时。把多的盘子去掉。
- }
- printf("%d\n",arr[a][b]);
- memset(arr,,sizeof(arr));
- }
- return ;
- }
还是要多做些递归题啊,,,,!
放苹果(poj1664递归)的更多相关文章
- poj1664放苹果(递归)
题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- poj 1664放苹果(递归)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37377 Accepted: 23016 Description ...
- poj1664 放苹果(递归)
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1664 ------ ...
- POJ 1664 放苹果(递归或DP)
一.Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t ...
- POJ 放苹果问题(递归)
首先我们想象有一个函数count f(m,n)可以把m个苹果放到n个盘子中. 根据 n 和 m 的关系可以进一步分析: 特殊的m <=1|| n <= 1时只有一种方法: 当 m < ...
- poj 1664 放苹果,递归(深度优先搜索)
#include "stdio.h" int DFS(int n,int m); int main() { int T; int n,m; int s; scanf("% ...
- poj1664 放苹果(DPorDFS)&&系列突破(整数划分)
poj1664放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33661 Accepted: 20824 Desc ...
- 递归--练习4--noi666放苹果
递归--练习4--noi666放苹果 一.心得 写出状态后勇敢假设 二.题目 666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允 ...
- POJ1664 放苹果 (母函数)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37515 Accepted: 23090 Description ...
随机推荐
- HttpClient的帮助类
/// <summary> /// http请求类 /// </summary> public class HttpHelper { private HttpClient _h ...
- ASP.NET MVC的切片(Section)脚本(script)
在ASP.NET MVC使用切片脚本,实在是很溜. 在使用layout之后,只是视图套用_Layout之后,在视图中任一位置任一时候均可以使用切片脚本. 首先在_Layout.cshtml定一些规则: ...
- JQuery Mobile - 导航栏选中状态代码
class="ui-btn-active" 参考: https://wizardforcel.gitbooks.io/w3school-jqmobile/content/8.htm ...
- Linux常用命令 - ls
目录 Linux常用命令-ls 简介 ls -F ls -a ls -R ls -l 后记 Linux常用命令-ls 简介 ls主要用于显示文件和目录列表.作为最常见的Linux命令,大家应该都不会陌 ...
- 二进制入门-打造Linux shellcode基础篇
0x01 前言 本文的目的不是为了介绍如何进行恶意的破坏性活动,而是为了教会你如何去防御此类破坏性活动,以帮助你扩大知识范围,完善自己的技能,如有读者运用本文所学技术从事破坏性活动,本人概不负责. ...
- fatal: LF would be replaced by CRLF in index.html
进入项目目录,在.git文件夹下打开config配置文件,添加上下面两句话: autocrlf = false safecrlf = false 即可
- npm 包 升降版本
今天用vue-awesome-swiper最新版本遇到些问题,需要调整到2.6.7版本.记录以下. 查看vue-awesome-swiper版本 npm list vue-awesome-swiper ...
- tomcat 启动 证书异常java.io.IOException: Alias name [cas] does not identify a key entry
在搭建CAS server的过程中,Tomcat开启https,配置秘钥证书,证书是通过keytool生成的 <Connector port=" protocol="org. ...
- MATLAB 到 Python之路1_数据结构和简单操作
在numpy中,用array来代替matrix,不同于MATLAB中的万物皆matrix,这里的数据首先以array存在,然后通过操作才能和矩阵形式的array运算 1,array的形式 1.1 一维 ...
- 【sping揭秘】2、关于spring配置文件
<import>标签 引入其他的配置文件,如果A.xml 中的<bean>定义可能依赖B.xml中的某些<bean>定义,那么可以再A.xml中使用这种方式< ...