这题虽然蛮简单,但是困扰了很久
这是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;
}