HDU 1799

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

题意:

n重循环,下一个循环的起始位置从上一个循环起始位置+1开始 。

思路:

循环次数实际上可以转化成组合数c(n,m)=c(n-1,m-1)+c(n-1,m)

代码:
#include<cstdio>
using namespace std;
int c[2010][2010];
int main()
{
    int n,m;
    int T;

    for(int i=1;i<=2000;i++)
    {
        c[i][0]=1;
        c[i][1]=i%1007;

    }
    for(int i=2;i<=2000;i++)
        {
            for(int j=2;j<=2000;j++)
                c[i][j]=(c[i-1][j-1]%1007+c[i-1][j]%1007)%1007;
        }
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&m,&n);
        printf("%d\n",c[n][m]);
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 20:37:57

HDU 1799的相关文章

HDU 1799 循环多少次?

/* 中文题意: 中文翻译: 题目大意:求循环的次数. 解题思路:如下: 难点详解:画表会发现和杨辉三角有点像,这就有了写下去的希望.但输出时m和n不一样,这样就要在调试中发现规律,才可输出正确的结果. 关键点:画表格,从中发现规律,进而解答这题. 解题人:lingnichong 解题时间:2014/08/01     00:08 解题感受:当时没写出来,后来会长说了一下,有了一些思路,就按这个思路写了下来.还是那个宗旨,题目看不懂可以,会写就行,写对了就行,不在乎你是什么方法.还有就是做题时要

HDU 1799 循环多少次?(组合数学)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1799 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循环操作,且每

hdu 1799 (循环多少次?)(排列组合公式)

循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3051    Accepted Submission(s): 1117 Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算

hdu 1799 原来还有公式。。没教过。。C(n)(m)=C(n-1)(m)+C(n-1)(m-1)

循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3096    Accepted Submission(s): 1144 Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算

HDU 1799 循环多少次?(DP+组合数学)

循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3984    Accepted Submission(s): 1513 Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算

hdu 1799 循环多少次?

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有总共多少计

HDU 1799 循环多少次? 解题心得

原题 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有

杭电 HDU ACM 1799 循环多少次?

循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3237    Accepted Submission(s): 1199 Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算

HDU ACM 1799 循环多少次?

利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. #include<iostream> using namespace std; int a[2001][2001]; int main() { int T,m,n,i,j; a[1][1]=1; //组合公式Cn(m)=C(n-1,m)+C(n-1,m-1) for(i=2;i<=2000;i++) { a[1][i]=i%1007; a[i][i]=1; } fo