循环次数( M - 暴力求解、打表)

循环次数

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

题意:

计算for循环中变量的运行次数。

分析:

1.数学问题,排列组合。公式:c(n,m)=c(n-1,m)+c(n-1,m-1)

2.需要从n个数里面选m 个数,按递增循环

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4
 5 int T[10000],m[2000],n[2000];
 6 int a[2005][2005];
 7
 8 int main()
 9 {
10     int T;
11     scanf("%d",&T);
12     a[0][0]=1;
13
14     for(int i=1;i<=2000;i++)    //打表
15     {
16         a[i][0]=1;
17         for(int j=1;j<=2000;j++)
18             a[i][j]=(a[i-1][j]+a[i-1][j-1])%1007;
19     }
20
21     while(T--)
22     {
23         int m,n;
24         scanf("%d%d",&m,&n);
25         printf("%d\n",a[n][m]);
26     }
27 return 0;
28 }

时间: 2024-08-24 10:03:09

循环次数( M - 暴力求解、打表)的相关文章

暴力方法——打表求解

有时候在竞赛中我们可能会碰到一种比较棘手的题目,这种题目数据较大且运算量较大,如果直接写解可能会致使时间复杂度变得很大,少则O(n2),多则O(nn),于是问题就来了,如何设计高效解法.但是在设计高效算法之前我们一般会考虑暴力求解,今天介绍一种方法——打表.什么是打表呢?打表按个人理解就是将要用到的尽可能多的数据先储存起来,在需要时再查询调用,查询调用的复杂度一般为O(C)(C for costant),比如说枚举阶乘,运算量及大,那么就可以直接打表储存.但是哲学观点告诉我们,这样的方法是有代价

HDU 1431 素数回文【暴力求解】

/* 题目大意:找一个范围内的所有素数回文数 解题思路:打一个表将1亿以内所有的素数回文数找出来,大概有780个这样子 关键点:暴力求解 解题人:lingnichong 解题时间:2014-08-29 12:02:55 解题体会:如果按一般方法打个素数表,很容易超内存(MLE),所以就先将所有的素数回文全部算出来,再在这个数组里面找在题上那个范围的所有素数回文数 */ 素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 655

第四章 分治策略 4.1 最大子数组问题 (暴力求解算法)

/** * 最大子数组的暴力求解算法,复杂度为o(n2) * @param n * @return */ static MaxSubarray findMaxSubarraySlower(int[] n) { long tempSum = 0; int left = 0; int right = 0; long sum = Long.MIN_VALUE; for (int i = 0; i < n.length; i++) { for (int j = i; j < n.length; j++

UVA 152-Tree&#39;s a Crowd(暴力求解三维坐标求最短距离)

Tree's a Crowd Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description  Tree's a Crowd  Dr William Larch, noted plant psychologist and inventor of the phrase ``Think like a tree--Think Fig'' has invented a new

求解最大子数组问题 -- 暴力求解 和 分治法求解

/*------------------ 求解最大子数组问题 --------------- 最大子数组,就是求解一个数组的所有元素的各种组合中,和最大的 那个子数组.在这种情况下,如果元素值全部非负,那么最大子数组当然 是所有元素.但是如果有负值的元素存在,那么久需要找到一个由数组中 连续几个元素组成的子数组并且其元素值之和最大. */ #include <iostream> using namespace std; struct ArrayStruct { ArrayStruct(int

BZOJ 1054题解 BFS暴力求解

BZOJ 1054题解 BFS暴力求解 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1884  Solved: 1033[Submit][Status][Discuss] Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移 动到某人

POJ 1562(L - 暴力求解、DFS)

油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerou

数矩形(N - 暴力求解、打表)

数矩形 Description 给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格. Input 第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100). Output 每行输出网格中有多少个矩形. Sample Input 2 1 2 2 4 Sample Output 3 30 题意: 一个N*M的网格,计算有多少矩形? 分析: 数学问题. 用到暴力,和打表的方法.打表就是找规律然后直接

UVA - 10396 Vampire Numbers 暴力+打表

题目大意:给出n,要求你输出所有符合规则的n位数 规则如下,这个n位数由两个n/2位数相乘得到,并且满足 1.这n位数为偶数 2.这两个n/2位数上的所有数刚好组成了这n位数 3.两个n/2位数不能都是10的倍数 解题思路:因为输入只有4,6,8,所以先预处理,暴力枚举4,6,8的情况,然后打表 #include<cstdio> #include<set> #include<cmath> using namespace std; #define maxn 10 set&