• NYOJ176整数划分(二)


     

    整数划分(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    把一个正整数m分成n个正整数的和,有多少种分法?

    例:把5分成3个正正数的和,有两种分法:

    1 1 3

    1 2 2

     
    输入
    第一行是一个整数T表示共有T组测试数据(T<=50)
    每组测试数据都是两个正整数m,n,其中(1<=n<=m<=100),分别表示要拆分的正数和拆分的正整数的个数。
    输出
    输出拆分的方法的数目。
    样例输入
    2
    5 2
    5 3
    样例输出
    2
    2
    
     1 #include <cstdio>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 int fun(int m, int n)  //等同于把 m 个苹果放在 n 个盘子里,每个盘子不空
     7 {
     8     if(m < n)
     9         return 0;
    10     if(m == n || n == 1)
    11         return 1;
    12     else
    13         return fun(m-n, n) + fun(m-1, n-1);//分成两种情况:1.至少有一个盘子中放了一个苹果;  2.每个盘子中苹果个数都大于1个
    14 }
    15 
    16 int main()
    17 {
    18     int T, n, m;
    19     scanf("%d", &T);
    20     while(T--)
    21     {
    22         scanf("%d%d", &m, &n);
    23         printf("%d\n", fun(m, n));
    24     }
    25     return 0;
    26 }
    27 
    28 
    29 //本题更快的方法就是先打表
    30  
    31 #include<stdio.h>
    32 int main()
    33 {
    34     int a,b,n,m,k;
    35     int ok[105][105]={0};
    36     ok[1][1]=1;
    37     for(a=2;a<=100;a++)
    38     {
    39         for(b=1;b<=a;b++)
    40             ok[a][b]=ok[a-b][b]+ok[a-1][b-1];
    41     }
    42     scanf("%d",&k);
    43     while(k--)
    44     {
    45         scanf("%d%d",&n,&m);
    46         printf("%d\n",ok[n][m]);
    47     }
    48 }        
  • 相关阅读:
    Django基于form组件实现注册校验
    Django 框架概况
    【ARM】S5PV210芯片的启动流程
    【ARM】S3C6410芯片的启动流程
    Go's Declaration Syntax
    挺经
    软件系统最重要的一点
    Laravel 服务容器实例教程 —— 深入理解控制反转(IoC)和依赖注入(DI)
    你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
    我的书单
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3002716.html
Copyright © 2020-2023  润新知