zoukankan      html  css  js  c++  java
  • H

     
    Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u

    Description

    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

    Input

    第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

    Output

    对输入的每组数据M和N,用一行输出相应的K。

    Sample Input

    1
    7 3
    

    Sample Output

    8
     1 #include<cstdio>
     2 using namespace std;
     3 int f(int m,int n)
     4 {
     5     if(n==1||m==0)
     6         return 1;
     7     if(n>m)
     8         return f(m,m);
     9     else
    10         return f(m,n-1)+f(m-n,n);
    11 }
    12 int main()
    13 {
    14     int m,n;
    15     int t;
    16     scanf("%d",&t);
    17     while(t--)
    18     {
    19         scanf("%d%d",&m,&n);
    20         printf("%d
    ",f(m,n));
    21     }
    22     return 0;
    23 }

    递推。

    设f(m,n)为m个苹果,n个盘子的放法数目,先对n讨论:

    当n>m必定有n-m个盘子永远空着;当n<=m时,1)至少有一个盘子空着,即相当于f(m,n)=f(m,n-1);2)所有盘子都有苹果,相当于可以从每个盘子拿掉一个苹果,不影响不同放法的数目,f(m,n)=f(m-n,n);

    递归出口条件:当n=1时,所有苹果必须放在一个盘子上,返回1;当没有苹果时,定义为一种放法;

    递归的两条路:第一条会逐渐减小到n==1;第二条m会逐渐减少,因为n>m时,returnf(m,m),所以终会到达出口m==0

  • 相关阅读:
    Mysql 数据库 表中列的操作
    FreeSWITCH版本更新
    shell脚本58问
    Wireshark 与 Tcpdump
    Mysql 中 int(3) 和 int(11) 的区别
    FreeSWITCH 基础
    FreeSWITCH 学习笔记(一)
    Mysql 复制表数据(表结构相同)
    Centos date 设置自定义时间
    Mysql 主键
  • 原文地址:https://www.cnblogs.com/angledamon/p/3861210.html
Copyright © 2011-2022 走看看