• 九度oj 题目1160:放苹果


    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    1
    7 3
    样例输出:
    8

    这道题真的是如果没思路就一点儿也不会。主要的思想是用递归函数,向n个篮子里放m个苹果,假如有空的,相当于往n-1个篮子里放m个苹果;假如没空的,就相当于往n个篮子里放m-n个苹果,减n的意思是
    n个篮子里放了n个苹果。
    代码如下:
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <iostream>
     6 using namespace std;
     7 
     8 int dp[11][11];
     9 
    10 int cal(int m, int n) {
    11     if(m < 0 || n < 0) {
    12         return 0;
    13     }
    14     if(n == 1) {
    15         return 1;
    16     }
    17     if(dp[m][n] != 0) {
    18         return dp[m][n];
    19     }
    20     else {
    21         dp[m][n] = cal(m, n-1) + cal(m-n, n);
    22         return dp[m][n];
    23     }
    24 }
    25 
    26 int main(int argc, char const *argv[])
    27 {
    28     int n, m, t;
    29     memset(dp, 0, sizeof(dp));
    30     while(scanf("%d",&t) != EOF) {
    31         while(t--) {
    32             scanf("%d %d",&m, &n);
    33             int ans = cal(m, n);
    34             printf("%d
    ",ans);
    35         }
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    移动传感器扫描覆盖
    最小生成树
    什么是壳 脱壳篇01
    最小生成树
    最小生成树
    最小生成树
    最小生成树
    最小生成树
    普里姆算法
    普里姆算法
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5757936.html
Copyright © 2020-2023  润新知