HDOJ(HDU) 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循环操作,且每次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
这道题利用 排列组合Cn(m)(也就是从n个元素中任取m个元素)的思考方式,实现过程用杨辉三角(因为杨辉三角的值 可以对1007取余并保存)。
现在解释一下为什么这道题跟排列组合有关:
假设现在有4个 小球 A B C D 要从中取2个 用排列组合的方式:先取A 然后依次取 B C D ;接下来 取B 然后依次取C D ;接下来取C 只能 取剩下的D 这样就有3 + 2 + 1 = 6 种组合。
这里的4 就是题目的n 这里的2就是题目的m(循环次数);
如果 循环次数为3 那么 先取A 再取B 然后依次 取 C D;
所以题目问的操作次数 也就是 问有多少种取球方式;
解题思路:求类似这样的问题。第一次怎么样。第二次怎么样,必定存在一定的规律,或是函数关系,或是递归。耐心写下几组。甚至几十组測试数据 ,你就会慢慢发现当中的联系。
本题最重要的是建立模型 你会发现这是一个杨辉三角模型:
import java.util.Scanner;
public class Main{
static int db[][] = new int[2005][2005];
public static void main(String[] args) {
dabiao();
Scanner sc = new Scanner(System.in);
int t =sc.nextInt();
while(t-->0){
int m =sc.nextInt();
int n = sc.nextInt();
System.out.println(db[n][m]);
}
}
private static void dabiao() {
for(int i=1;i<=2000;i++){
db[1][i]=0;
db[i][1]=i%1007;
}
for(int i=2;i<=2000;i++){
for(int j=2;j<=i;j++){
db[i][j] = (db[i-1][j]+db[i-1][j-1])%1007;
}
}
}
}
HDOJ(HDU) 1799 循环多少次?(另类杨辉三角)的更多相关文章
- HDU——1799循环多少次(杨辉三角/动态规划/C(m,n)组合数)
循环多少次? Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU 6129 Just do it(杨辉三角)
http://acm.hdu.edu.cn/showproblem.php?pid=6129 题意: 给出数组a,并且bi=a1^a2^a3...^ai,并且现在会重复m次,求出最后的b数组. 思路: ...
- HDU 5794 A Simple Chess(杨辉三角+容斥原理+Lucas定理)
题目链接 A Simple Chess 打表发现这其实是一个杨辉三角…… 然后发现很多格子上方案数都是0 对于那写可能可以到达的点(先不考虑障碍点),我们先叫做有效的点 对于那些障碍,如果不在有效点上 ...
- HDU 4927 Series 1(高精度+杨辉三角)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4927 解题报告:对于n,结果如下: C(0,n-1) *A[n] - C(1,n-1) * A[n-1 ...
- 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)
题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...
- 08-使用for循环输出杨辉三角(循环)
/** * 使用循环输出杨辉三角 * * */ public class Test6 { public static void main(String[] args) { // 创建二维数组 int ...
- 使用for循环输出杨辉三角-还是不懂得需要复习
package com.chongrui.test; /* *使用for循环输出杨辉三角杨辉三角形由数字排列,可以把它看作一个数字表,其基本特征是两侧的数值均为1,其他位置的数值是其正上方的数值与左上 ...
- HDU 2032 杨辉三角
http://acm.hdu.edu.cn/showproblem.php?pid=2032 Problem Description 还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考 ...
- java基础:进制详细介绍,进制快速转换,二维数组详解,循环嵌套应用,杨辉三角实现正倒直角正倒等腰三角,附练习案列
1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...
随机推荐
- Qt 学习之路 :Qt 绘制系统简介
Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类. QPainter用来执行绘制的 ...
- [转] 学习HTML/JavaScript/PHP 三者的关系以及各自的作用
1.What is HTML? When you write a normal document using a word processor like Microsoft Word/Office, ...
- HTML5之部分显示
- Android Studio 使用GitHub
Android Studio 使用GitHub 1.安装配置 默认大家都已经安装了git软件,参考下图进行git与as关联 配置git 设置GitHub用户信息 填写完用户名,密码后可以点击Tes ...
- Effective java-枚举和注解思维导图
- HTML5 Canvas Text实例1
1.简单实例1 <canvas width="300" height="300" id="canvasOne" class=" ...
- configSections(配置文件)
转载:http://www.cnblogs.com/jhxk/articles/1609182.html 由于最近一个项目的数据库变动比较频繁, 为了减少数据层的负担, 打算采用.net的MVC框架, ...
- android 9Path图片的使用
Android UI设计时,经常会使用图片作为背景,比如给按钮设置背景图片时,图片会默认缩放来适应整个按钮.但是有时这种缩放效果并不是我们所需求的.而我们只是希望缩放图片的特定位置,以此来保证按钮的视 ...
- [标签] action的使用
1.描述 This tag enables developers to call actions directly from a JSP page by specifying the action n ...
- jquery 插件模版
;(function ($) { //插件的默认值属性 var defaults = { Weight: '300px', height: '230px', nextId: 'nextBtn', ne ...