hdu 2519

HDU 2519 新生晚会

作者: 垂钓玄武  来源: 博客园  发布时间:2010-05-04 12:49  阅读:91 次  原文链接  [收藏] 

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2519

hdu 2519_第1张图片

能想到C(n,m)=C(n-1,m)+C(n-1,m-1),很快就可以解出。当然,也可以弄个大整数运算来做,麻烦了,走弯路了。

 

 

#include<stdio.h>

#include<string.h>

#defineMAX 1000

intarr[MAX];

longsolve(int n,int m)

{

    int i,j;

arr[0]=1;

    for(i=1;i<=n;i++)

    {

        for(j=i;j>-1;j--)

        {

            if(j==0||i==j)    arr[j]=1;

            else        arr[j]+=arr[j-1];

        }

    }

    return arr[m];

}

intmain()

{

    int num;

    int n,m;

    scanf("%d",&num);

    memset(arr,0,MAX*sizeof(int));

    while(num--)

    {

        scanf("%d%d",&n,&m);

        printf("%ld\n",solve(n,m));

    }

    return 0;

}

#include <iostream>
2 using namespace std;
3 #define PERSON_MAX_NUM 31
4
5 int pailie[PERSON_MAX_NUM][PERSON_MAX_NUM];
6
7 void main()
8 {
9     int T;
10     cin>>T;
11
12     for (int i=0;i<T;i++)
13     {
14         int N,M;
15         cin>>N>>M;
16         if(N<M)
17             cout<<0<<endl;
18         else{
19             if(M>N/2)
20                 M=N-M;
21             for (int j=0;j<PERSON_MAX_NUM;j++)
22             {
23                 pailie[j][0]=1;
24             }
25             pailie[0][1]=0;
26
27             for (j=1;j<=N;j++)
28             {
29                 for (int k=0;k<=j;k++)
30                 {
31                     pailie[j][k]=pailie[j-1][k]+pailie[j-1][k-1];
32                 }
33             }
34             cout<<pailie[N][M]<<endl;
35         }
36     }
37 }

你可能感兴趣的:(c,iostream,2010)