题解分享
题解分享简介
走方格(编程题) - 题解
```cpp
// https://dashoj.com/d/lqbproblem/p/100
#include <bits/stdc++.h>
#define N 50
using namespace std;
int n, m, ans = 0;
vector<vector<int>> g(N, vector<int>(N, 0));
int main() {
cin >> n >> m;
g[1][1] = 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
if (i == 1 && j == 1) continue;
if (i % 2 || j % 2) g[i][j] = g[i - 1][j] + g[i][j - 1];
}
cout << g[n][m] << endl;
return 0;
}
```
查看全文
0
0
1
0
走方格(编程题) - 题解
```
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int [][]dp = new int[n][m];
for(int i = 0; i < n; i++) {
dp[i][0] = 1;
}
for(int i = 0; i < m; i++) {
dp[0][i] = 1;
}
for(int i = 1; i < n; i++) {
for(int j = 1; j < m; j++) {
if((i+1) % 2 != 0 || (j+1) % 2 != 0) {
dp[i][j] = dp[i][j-1] + dp[i-1][j];
}
}
}
System.out.println(dp[n-1][m-1]);
}
}
```
查看全文
0
0
0
1
走方格(编程题) - 题解
```
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
int g[N][N],mem[N][N];
int dx[]={1,0};
int dy[]={0,1};
int dfs(int x,int y){
if(mem[x][y]) return mem[x][y];
if(x==1&&y==1) return 1;
int sum=0;
if(g[x-1][y]) sum+=dfs(x-1,y);
if(g[x][y-1]) sum+=dfs(x,y-1);
return mem[x][y]=sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i%2||j%2){
//1可以走,0不可以走
g[i][j]=1;
}
}
}
if(n%2==0&&m%2==0) cout<<"0"<<endl;
else cout<<dfs(n,m)<<endl;
return 0;
}
```
查看全文
0
0
0
0



