hdu 新生晚会

Problem Description

开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?

Input

数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行。
每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)

Output

每组数据输出一个整数,每个输出占一行

Sample Input

5
3 2
5 3
4 4
3 6
8 0

Sample Output

3
10
1
0
1

刚开始的思路

二项式系数C(nk)满足下面的要求:

C(n, 0) = C(nn) = 1 for all n > 0;
C(nk) = C(n − 1, k − 1) + C(n − 1, k) for all 0 < k < n.

题目要求根据给定的n和k(0 ≤ k ≤ n < 231n > 0)计算C(n,k),典型的递归问题。

但是如果采用递归,当n的值比较大的时候,会堆栈益处。而上面的表达式应该有相应的公式。如果采用公式计算就会变的简单了。

但是总是WA,最后发现是超出范围!!!

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 int zuhe(int n,int k)
 5 {
 6     int *result = new int[n];
 7     for(int i=1;i<=n;i++)
 8     {
 9         result[i] = 1;
10         for(int j=i-1;j>=1;j--)
11         {
12             result[j] = result[j-1]+result[j];
13         }
14         result[0] = 1;
15     }
16     return result[k];
17 }
18 int main()
19 {
20     int t;
21     scanf("%d",&t);
22     while(t--)
23     {
24         int a,b;
25         scanf("%d%d",&a,&b);
26         if(b>a)
27         {
28             printf("0\n");
29             continue;
30         }
31         printf("%d\n",zuhe(a,b));
32     }
33     return 0;
34 }

可以这样:

 1 #include<iostream>
 2 using namespace std;
 3 int c[31][31];
 4 int main()
 5 {
 6     int i,j;
 7     for(i=1;i<31;i++)
 8     {c[i][0]=1;c[i][1]=i;}
 9     for(i=2;i<31;i++)
10         for(j=2;j<=i;j++)
11           c[i][j]=c[i-1][j]+c[i-1][j-1];
12     int t,n,m;
13     while(scanf("%d",&t)!=EOF)
14     {
15         while(t--)
16         {
17             scanf("%d%d",&n,&m);
18             printf("%d\n",c[n][m]);
19         }
20     }
21     return 0;
22 }

之后通过了解:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int main(void)
 5 {
 6    int m,n,t;
 7    long long sum;
 8    cin>>t;
 9    while(t--)
10    {
11        cin>>n>>m;
12          sum=1;
13      for(int i=1;i<=m;i++)
14      {
15          sum*=n--;
16          sum/=i;
17      }
18      printf("%lld\n",sum);
19    }
20    return 0;
21 }
时间: 2025-01-14 13:56:57

hdu 新生晚会的相关文章

hdu 2519 新生晚会 排列组合基础

新生晚会 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9203    Accepted Submission(s): 3230 Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? Inpu

HDU2519 新生晚会【水题】【组合数】

新生晚会 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9909    Accepted Submission(s): 3490 Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? Inpu

HDOJ(HDU) 2519 新生晚会(组合公式)

Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? Input 数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行. 每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30) Output 每组数据输出一个整数,每个输出占一行 Sample Input 5 3 2 5 3 4 4 3 6

hdu 2519 新生晚会 排列组合

通过阶段性计算减少一次性的大值计算 #include <stdio.h> int main() { int t, a, b, i; __int64 c; scanf("%d", &t); while(t--) { scanf("%d%d", &a, &b); if(a < b) printf("0\n"); else { c = 1; for(i = 1; i <= b; i++) c = c *

HDU2519:新生晚会

Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? Input 数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行. 每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30) Output 每组数据输出一个整数,每个输出占一行 Sample Input 5 3 2 5 3 4 4 3 6

《程序设计技术》课程辅助学习资料

本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定一个坚实的基础. 自己编写程序也是学习编程必不可少的一个环节.自己编写是否正确可以通过OJ系统来验证.选做OJ的程序设计题方便于评价自己所写的程序是否正确.想要提高编写程序的能力并且达到更高的水平,从各个OJ中选做一些编程题是十分必要的. 文中提供了CCF-CSP认证考试历年 试题的第1题的题解.这些题解中都

POJ 2519

又是一个水题?? 不过还是弄是很久... 在蒟蒻的路上越走越远 , 好了讲题 新生晚会 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13433    Accepted Submission(s): 4641 Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,

铁大部分地点介绍

大门 石家庄铁道大学的大门并不豪华,正如这所学校以及学校的师生一样朴素而在阳光里光辉.这所大门或许并不是传说中的幸运之门,但走进这所大门必会给你留下深刻的印象,或许你将在这里度过宝贵的四年大学时光,或许你只是来这里走走,但相信你一定会有很多美好的收获. 石家庄铁道大学前身是中国人民解放军铁道兵工程学院,创建于1950年 ,系当时全军重点院校:1979年被列为全国重点高等院校:1984年转属铁道部,更名为石家庄铁道学院:2000年划转河北省,实行中央与地方共建,为河北省重点骨干大学:2010年3月

【转】互联网产品经理的职业规划:你必须知道每天应该做什么

一.像观察自己的BABY成长一样,观察用户的行为.发掘用户需求1.每天至少看一次论坛,发现用户有提问或者投诉,要还原场景来考虑用户的行为,再做出优化或者创新的判断2.能够准确说出自己的用户画像,他们的年龄层.性别比例.主体需求.行为偏好3.掌握适合自己产品的有效的CE方法,包括观察法.问卷调查.焦点访谈,每季度亲身经历一次4.维护至少一个用户QQ群,或者加几个用户为QQ好友,每周至少聊一次5.要找到用户行为背后的规律,每一次效果好/差的活动.每一次用户的投诉,不要只看到表面的问题,都要要求自己主