zoukankan      html  css  js  c++  java
  • 【递归】放苹果

    【递归】放苹果

    题目描述

    楚继光刚把油拿到厨房,老妈又大声喊道:“快去把苹果洗了放到盘子里去。”

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

    输入

    第1行为一个整数,表示测试数据的数目(测试数据的数目t(0 ≤ t ≤20),第2行为M和N(M和N,以空格分开。1≤M,N≤10)。

    输出

    输出有多少种不同分法。

    样例输入

    1
    7 3
    

    样例输出

    8
    分析:球盒问题的一种;
    若当前用了K个盘子,则在K个盘子中各放一个苹果;否则转化为K-1个盘子的问题;
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define vi vector<int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    const int maxn=1e6+10;
    const int dis[][2]={0,1,-1,0,0,-1,1,0};
    using namespace std;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p%mod;p=p*p%mod;q>>=1;}return f;}
    ll dfs(int a,int p)
    {
        if(a<=1||p<=1)return 1;
        else if(a<p)return dfs(a,a);
        else return dfs(a-p,p)+dfs(a,p-1);
    }
    int main()
    {
        int i,j,m,n,k,t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&m,&n);
            printf("%lld
    ",dfs(m,n));
        }
        //system("pause");
        return 0;
    }
     
  • 相关阅读:
    C#控件随窗体大小改变而改变
    Java泛型
    php的stristr()函数,查找字符
    java设计模式之桥梁模式(Bridge)
    怎样从本地删除git远程仓库里面的文件
    VS code 修改主题设置代码对其齐线
    vue+webpack安装sass过程中遇到权限不够,直接删除node_modus文件夹重新安装,node_modus先取得管理员权限才能删
    转:git合并冲突解决方法
    git命令行解决冲突文件步骤
    dos常用命令
  • 原文地址:https://www.cnblogs.com/dyzll/p/5645486.html
Copyright © 2011-2022 走看看