• POJ 1664 递推


     

    放苹果

     

    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 26924   Accepted: 17110

     

    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

     

    Source

     

     

     

    POJ 1664 解题思路:

    如果i<j:dp[i][j]=dp[i][i];

    否则:如果第j个盒子不放苹果:dp[i][j]=dp[i][j-1];

              如果第j个盒子放苹果:dp[i][j]=dp[i-j][j],相当于在j个盒子中每一个先放一个苹果,然后把剩

                                                  余的i-j个苹果放在j个盒子中;

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int t,n,m;
     7 int dp[11][11];
     8 
     9 int main()
    10 {
    11     //freopen("in.txt","r",stdin);
    12     scanf("%d",&t);
    13     while(t--){
    14         scanf("%d%d",&m,&n);
    15         memset(dp,0,sizeof(dp));
    16         for(int i=0;i<=m;i++)
    17             dp[i][0]=1;
    18         for(int i=0;i<=m;i++)
    19             dp[i][1]=1;
    20         for(int i=0;i<=n;i++)
    21             dp[1][i]=1,dp[0][i]=1;
    22         for(int i=2;i<=m;i++)
    23             for(int j=2;j<=n;j++)
    24         {
    25             if(i>=j) dp[i][j]=dp[i][j-1]+dp[i-j][j];
    26             else dp[i][j]=dp[i][i];
    27         }
    28         printf("%d
    ",dp[m][n]);
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    [转]html之file标签 --- 图片上传前预览 -- FileReader
    常用正则表达式
    c# color 颜色代码
    WebForm 母版页使用
    iframe同域自适应问题
    完整版AJAX
    AJAX基础
    jQuery 小特效【文本框折叠隐藏,展开显示】【下拉菜单】【颜色渐变】【弹窗+遮罩】
    JQuery中的Dom操作和事件
    LINQ 【增、删、改、查】数据绑定
  • 原文地址:https://www.cnblogs.com/codeyuan/p/4280211.html
Copyright © 2020-2023  润新知