这题虽然蛮简单,但是困扰了很久

这是AC代码

#include<iostream>
using namespace std;
int m, n;
const int M = 3005;
int mp[M][M];
const int mod = 2333;
int dp[M][M];
int main() {
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> m >> n;
	for (int i = 1; i <= m; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> mp[i][j];
		}
	}
	dp[m][0] = 1;
	for (int i = m; i >= 1; i--) {
		for (int j = 1; j <= n; j++) {
			if (mp[i][j] == 1) continue;
			dp[i][j] = (dp[i + 1][j] + dp[i][j - 1]) % mod;

		}
	}
	cout << dp[1][n] % mod << endl;
	return 0;
}

这是0%通过率的代码

找了很久没发现哪里不对,感觉两种写法是一样的,我现在初步猜测是可能因为m,n的下界可能是1导致的问题,但是也不能一个不过吧

希望大佬指点。

#include<bits/stdc++.h>
using namespace std;
int m,n;
const int M=3005;
int mp[M][M];
const int mod=2333;
int dp[M][M];
int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			cin>>mp[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		if(mp[i][1]==1) continue;
		dp[i][1]=1;
	}
	for(int i=1;i<=n;i++){
		if(mp[m][i]==1) continue;
		dp[m][i]=1;
	}
	for(int i=m-1;i>=1;i--){
		for(int j=2;j<=n;j++){
			if(mp[i][j]==1) continue;
			dp[i][j]=(dp[i+1][j]+dp[i][j-1])%mod;
			
		}
	}
	
	cout<<dp[1][n]%mod<<endl;
	return 0;
}