「木」迷雾森林 (路径DP)

题目传送梦

思路:板子题,唯一需要注意的是数据较大要用到快读。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int mod=2333,N=3e3+5;
int m,n;
int a[N][N],dp[N][N];
int read(){ //快读 
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
int main(){
    n=read(),m=read();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++) a[i][j]=read();
    dp[n][1]=1;
    for(int i=n;i>=1;i--)
        for(int j=1;j<=n;j++)
        {
            if(!a[i][j]) dp[i][j]=max(dp[i][j],dp[i+1][j]+dp[i][j-1])%mod;  
			//printf("dp[%d][%d]=%d\n",i,j,dp[i][j]); 
        }
    printf("%d\n",dp[1][n]);
    return 0;
}