【51NOD-0】1118 机器人走方格】的更多相关文章

51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式子:dp[i][j] = dp[i-1][j] + dp[i][j-1].  dp[i][j]表示当规格为i*j  (m = i && n = j)  时本题的结果. 直接上代码: #include <stdio.h> #include <string.h> #defi…
M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. 收起 输入 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000) 输出 输出走法的数量. 输入样例 2 3 输出样例 3 思路:这道题也是较简单的,由于机器人只能向下或者向右走,所以在最后一步即右下时,它有两种途径,即从它左边或者上边到达的. 另dp[i][j]表示走到(i,j)点的路径数目,可以得到递推式:dp[i][j]=…
M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. 收起   输入 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000) 输出 输出走法的数量. 输入样例 2 3 输出样例 3动态规划代码: #include <iostream> #include <cstdio> #include <cstring> #define MAX 1000 #d…
M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000) Output 输出走法的数量. Input示例 2 3 Output示例 3解:简单dp,注意空间复杂度的优化. #include <stdio.h> #define MOD ((int)1e9+7) ] = {}; int main() { int…
(x/y) %mod =x*(y^(mod-2))%mod; 在算x,y的时候可以一直mod 来缩小 y^(mod-2)显然是个快速幂 #include <iostream> #include <stdio.h> #include <math.h> using namespace std; +; long long quick(long long n,long long m) { ; while(m) { ==) ans=ans*n%mod; m/=; n*=n; n%…
[算法]DP #include<cstdio> #include<algorithm> using namespace std; ,maxn=; int f[maxn][maxn]; int mods(int x) {return x>MOD?x-MOD:x;} int main() { int n,m; scanf("%d%d",&n,&m); f[][]=; ;i<=n;i++) { ;j<=m;j++) { f[i][j]…
1119 机器人走方格 V2  基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3 C(n - 1 +…
1120 机器人走方格 V3  基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果. Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 1…
1120 . 机器人走方格 V3   基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果.   Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input 示例 4 Output 示例 10 思路:实际是本质…
矩阵快速幂求出每个点走n步后到某个点的方案数.然后暴力枚举即可 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) m…
跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了.那么就是卡特兰数了.然后由于n和m太大所以用了lucas定理 //跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了.那么就是卡特兰数了. #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int…
终于学到了求组合数的正确姿势 //C(n+m-2,m-1) #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ll long long…
1122 机器人走方格 V4 基准时间限制:1 秒 空间限制:131072 KB  四个机器人a b c d,在2 * 2的方格里,一开始四个机器人分别站在4个格子上,每一步机器人可以往临近的一个格子移动或留在原地(同一个格子可以有多个机器人停留),经过n步后有多少种不同的走法,使得每个毯子上都有1机器人停留.由于方法数量巨大,输出 Mod 10^9 + 7的结果.   Input 输入1个数N(0 <= N <= 10^9) Output 输出走法的数量 Mod 10^9 + 7 Input…
1120 机器人走方格 V3 基准时间限制:1 秒 空间限制:131072 KB N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果.   Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 10 思路:这个在对角线的上方,就可以转换为,火…
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果.   Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3思路:打个表找个规律,然后发现是组合数,然后取模费马小定理. 1 #…
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果.   Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3 //挺懵逼的,虽然看出动规后是个杨…
题目链接: 1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB    M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果.   Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output   输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3 题意: 中文的就不说了; 思路: 这题用dp…
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000) Output 输出走法的数量.…
M * N的方格,一个机器人从左上走到右下,只能向右或向下走. 有多少种不同的走法? 注意:给定 M, N 是一个正整数. 示例 输入: 1行, 2个数M,N,中间用空格隔开.(2 <= m,n <= 1000) 输出: 输出走法的数量. 输入样例 2 3 输出样例 3 #解一 def solve(M: int, N: int) -> int: if M == 1 or N == 1: return 1 return solve(M-1, N) + solve(M, N-1) #解二 d…
N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果.   Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 10 明显是一道卡特兰数,推出ans = C(2*n-2,n-1) * 2 / n % MOD先让n--,ans = C(2*n,…
N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走. 并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法? 由于方法数量可能很大,只需要输出Mod 10007的结果.   Input 输入一个数N(2 <= N <= 10^9). Output 输出走法的数量 Mod 10007. Input示例 4 Output示例 10————————————————————————————这题是裸的卡特兰数 不过因为mod比2*n小 所以要加上lucas…
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1120 题解: 1.看到这种题,马上就想到了卡特兰数.但卡特兰数最快也要O(n)的时间复杂度去递推或者预处理,而n的范围是1e9,所以行不通.但发现Mod的值为10007,感觉突破口在里头,但没有头绪. 2.后来发现了Lucas定理: C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p,p为素数 这个式子大大缩小了n的范围,因此就可以直接上卡特兰数…
首先建立矩阵,给每个格子编号,然后在4*4的格子中把能一步走到的格子置为1,然后乘n次即可,这里要用到矩阵快速幂 #include<iostream> #include<cstdio> using namespace std; const int mod=1e9+7; long long n,ans; struct qwe { long long a[5][5]; qwe operator * (qwe b) { qwe c; for(long long i=1;i<=4;i…
-我并不知道为什么事卡特兰数,反正用dp打的表就是卡特兰数,因为是两个三角所以再乘个2 卡特兰数使用\( h(n)=\frac{C_{2n}^{n}}{n+1} \)因为范围比较大所以组合数部分用卢卡斯定理来求. #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; const int mod=10007,N=10020;…
挺水的但是我好久没写组合数了- 用这样一个思想,在1~m列中,考虑每一列上升几格,相当于把n-1个苹果放进m个篮子里,可以为空,问有几种方案. 这个就是一个组合数学经典问题了,考虑n个苹果放进m个篮子里,不可以为空的情况,用插板法,也就是把m-1个板子插进排成一排的果子里,分成m个不为空的区间,方案数为\( C_{n-1}^{m-1} \),现在考虑n个苹果放进m个篮子里,可以为空的情况,可以想成每个篮子里事先都放了一个苹果,那么就转为了上一个问题,方案数为\( C_{n+m-1}^{m-1}…
题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][j]表示最初在第i个位置上的机器人n次变换后位于第j个位置的情况数 最后求一下任意两个机器人不在相同位置的情况数之和(注意乘法原理和加法原理的应用) #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ; LL…
M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果.   Input 第1行,2个数M,N,中间用空格隔开.(2 <= m,n <= 1000000) Output 输出走法的数量 Mod 10^9 + 7. Input示例 2 3 Output示例 3 思路: 我们从左上走到右下 一共要往下走n-1次 往右走 m-1次 一共走了 n+m-2次但是不同的地方可以在向下走(n-1)次 或者向右走(m-1…
从一个长方形的方格的右上角 走到 左下角 , 问一共有多少种不同的路线可以达到 . #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set> #include<stack> #in…
题目实际上是求catalan数的,Catalan[n] = C(2*n,n) / (n+1) = C(2*n,n) % mod * inv[n+1],inv[n+1]为n+1的逆元,根据费马小定理,可以通过快速幂快速求出. 因为n的数据范围较大,所以要用到卢卡斯定理:若p为素数,那么C(m,n)%p = C(m/p,n/p) * C(m%p,n%p)  % p.从而我们可以递归的可以求出C(m,n),当n==0,返回1. 因为方格含有两个三角形,所以Catalan[n]*2 即是最终答案 #in…
这道题只需要把障碍点都设为0就可以了. public static int countWays(int[][] map,int x, int y){ if( x < 0 || y < 0) return -1; int[][] dp = new int[x][y]; for(int i = 0; i < x; i++){ if(map[i][0] == 1){ dp[i][0] = 1; } else{ break; } } for(int j = 0; j < y; j++){…