• POJ --- 1164 放苹果


      

                                    放苹果

    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 24947   Accepted: 15887

    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

    思路:dp[i][j]表示i个苹果,j个盘子的放的方案数,则有dp[i][j] = dp[i][j-1] + dp[i-j][j],dp[i][j-1]表示不是所有的盘子都放有苹果,dp[i-j][j],表示所有的盘子中都放入了苹果,这个前提是i>=j。i<j时,dp[i][j] = dp[i][i]。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int dp[15][15];
     6 int main(){
     7     int n, m, t;
     8     for(int i = 0;i <= 10;i ++) dp[0][i] = dp[1][i+1] = 1;
     9     for(int i = 0;i <= 10;i ++){
    10         for(int j = 1;j <= 10;j ++){
    11             if(i < j) dp[i][j] = dp[i][i];
    12             else dp[i][j] = dp[i][j-1] + dp[i-j][j];
    13         }
    14     }
    15     /* freopen("in.c", "r", stdin); */
    16     scanf("%d", &t);
    17     while(t--){
    18         scanf("%d%d", &n, &m);
    19         printf("%d
    ", dp[n][m]);
    20     }
    21     return 0;
    22 }

    Python 代码:

     1 def fun(n, m):
     2     if n < 0:
     3         return 0
     4     if n == 0 or n == 1 or m == 1:
     5         return 1
     6     if n < m:
     7         return fun(n, n)
     8     if n >= m:
     9         return fun(n, m-1) + fun(n-m, m)
    10 n = int(raw_input())
    11 m = int(raw_input())
    12 print fun(n, m)
  • 相关阅读:
    Array的应用
    事物的操作
    定义集合
    wxWidgets 在 Linux 下开发环境配置
    Emacs 中 GDB 的使用
    wxWidgets 在 Windows 下开发环境配置
    Ubuntu14.04终端主机名+用户名修改配色方案
    S5PV210之内外存学习
    Ubuntu14.04进行配置符号链接arm2009q3.tar.bz2
    Ubuntu14.041+VMware12.0NET方式网卡连接虚拟机联网问题解决方法
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3628905.html
Copyright © 2020-2023  润新知