zoukankan      html  css  js  c++  java
  • 放苹果

    题目链接:https://www.luogu.org/problemnew/show/P2386

    题目描述

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

    输入输出格式

    输入格式:

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    1
    7 3
    输出样例#1:
    8
    输入样例#2
    3
    3 2
    4 3
    2 7
    
    输出样例#2
    2
    4
    2
    解析
    这道题和买书挺相似,针对每个盘子我们都可以放0-n个苹果,需要打个标记保证后面的数大于等于前面的数来去重。
    代码
    #include<bits/stdc++.h>
    using namespace std;
    int t;
    int m,n;
    int ans;
    void dfs(int last,int step,int now)
    {
        if(last==0&&step>n)
        {
            ans++;
            return;
        }//先判断合法
        if(step>n) return;
        if(last==0) return;//提前返回,小剪枝
        for(int i=now;i<=m;i++)
        {
            dfs(last-i,step+1,i);
        }
    }
    int main()
    {
        cin>>t;
        for(int i=1;i<=t;i++)
        {
            cin>>m
            >>n;
            dfs(m,1,0);
            cout<<ans<<endl;
            ans=0;//多组数据初始化 (重点)
        }
        return 0;
    }
    
    
    
     
  • 相关阅读:
    Scala语言
    Eclipse的各种问题
    Java:
    Come on
    问题:实现继承的抽象方法
    Android:报错AndroidManifest.xml file missing
    正则表达式
    Android:相对布局Relativeyout中的属性解释
    Android:生命周期案例
    Android:设置APP全屏、横屏、竖屏、常亮的方法
  • 原文地址:https://www.cnblogs.com/KyleDeng/p/9284443.html
Copyright © 2011-2022 走看看