zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    jQuery插件开发模式
    优化布局
    jquery easyui 选项卡
    easy ui 点击行展开与折叠
    考拉海购技术支持的前世今生
    跑的好好的 Java 进程,怎么突然就瘫痪了
    Dubbo 如何成为连接异构微服务体系的最佳服务开发框架
    微服务治理实践:如何对单点异常进行自动摘除
    盘点阿里巴巴 15 款开发者工具
    千万创业者的自白:踩过坑才明白这些真相!
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3628905.html
Copyright © 2011-2022 走看看