HDU:1799 循环多少次?(组合,杨辉三角)
2016-04-11 21:49
295 查看
循环多少次?
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3965 Accepted Submission(s): 1496
Problem Description
我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。例如,
如果代码中出现
for(i=1;i<=n;i++) OP ;
那么做了n次OP运算,如果代码中出现
fori=1;i<=n; i++)
for(j=i+1;j<=n; j++) OP;
那么做了n*(n-1)/2 次OP 操作。
现在给你已知有m层for循环操作,且每次for中变量的起始值是上一个变量的起始值+1(第一个变量的起始值是1),终止值都是一个输入的n,问最后OP有总共多少计算量。
Input
有T组case,T<=10000。每个case有两个整数m和n,0<m<=2000,0<n<=2000.
Output
对于每个case,输出一个值,表示总的计算量,也许这个数字很大,那么你只需要输出除1007留下的余数即可。
Sample Input
2 1 3 2 3
Sample Output
3 3
Author
wangye
Source
2008
“Insigma International Cup” Zhejiang Collegiate Programming Contest - Warm Up(4)
Recommend
wangye
刚开始不知道怎么做,但是一画树状图后就能看出是个组合问题,根据组合的递推公式c(n,m)=c(n-1,m-1)+c(n-1,m),也就是杨辉三角的规律,可出打表,看代码。
(注意m、n对应的关系)
#include <stdio.h> int zuhe[2001][2001]; int m,n; void dabiao() { for(int i=0;i<2001;i++) { zuhe[i][0]=1; zuhe[i][i]=1; } for(int i=1;i<2001;i++) { for(int j=1;j<i;j++) { zuhe[i][j]=zuhe[i-1][j-1]+zuhe[i-1][j]; zuhe[i][j]=zuhe[i][j]%1007; } } } int main() { int t; dabiao(); scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); printf("%d\n",zuhe [m]); } return 0; }
相关文章推荐
- 用批处理解决数学问题的代码第1/4页
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- C语言打印杨辉三角示例汇总
- Java基础教程之组合(composition)
- C语言小程序 杨辉三角示例代码
- C#使用动态规划解决0-1背包问题实例分析
- C#实现排列组合算法完整实例
- Oracle数学相关函数小结
- php通过排列组合实现1到9数字相加都等于20的方法
- php常用数学函数汇总
- C语言实现的阶乘,排列和组合实例
- C++中继承与组合的区别详细解析
- C语言实现杨辉三角实例
- C语言在屏幕上输出杨辉三角
- python以环状形式组合排列图片并输出的方法
- PHP组合查询多条件查询实例代码第1/2页
- JavaScript如何实现组合列表框中元素移动效果
- java使用for循环输出杨辉三角
- 用Python输出一个杨辉三角的例子