其他分享
首页 > 其他分享> > 1010 「木」迷雾森林 线性DP 动态规划

1010 「木」迷雾森林 线性DP 动态规划

作者:互联网

链接:https://ac.nowcoder.com/acm/problem/53675
来源:牛客网

题目描述
</h2>
赛时提示:保证出发点和终点都是空地
帕秋莉掌握了一种木属性魔法 这种魔法可以生成一片森林(类似于迷阵),但一次实验时,帕秋莉不小心将自己困入了森林

帕秋莉处于地图的左下角,出口在地图右上角,她只能够向上或者向右行走

现在给你森林的地图,保证可以到达出口,请问有多少种不同的方案

答案对2333取模

输入描述:

第一行两个整数m , n表示森林是m行n列
接下来m行,每行n个数,描述了地图
0 - 空地
1 - 树(无法通过)

输出描述:

一个整数表示答案
示例1

输入

复制
3 3
0 1 0
0 0 0
0 0 0

输出

复制
3

备注:

对于30%的数据,n,m≤100
对于100%的数据,n,m≤3,000
数据规模较大,请使用较快的输入方式,以下为快速读入模板

template<class T>inline void read(T &res)
{
char c;T flag=1;
while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
}

scanf("%d",&x) -> read(x)
cin>>x -> read(x)

(调用方式:read(要读入的数))




分析

只能向右上走,就跟马前卒一样,当走到不能走的点就把DP值置0就好了

 

 

易错点


注意是从左下角走到右上角,不要一直从左上角走了。。wa了好多发在这里

//-------------------------代码----------------------------

//#define int LL
const int N = 4000;
int n,m;
int mp[N][N],dp[N][N];

templateinline void read(T &res) {
char c;T flag = 1;
while((c = getchar()) < '0' || c > '9') if(c == '-') flag = -1;res = c - '0';

while((c=getchar())>='0'&&c<='9')res=res10+c-'0';res=flag;
}

void solve()
{
read(n),read(m);
// n = read(),m = read();

fo(i,1,n) {
    fo(j,1,m) {
        read(mp[i][j]);
    }
}
dp[n][1] = 1;
of(i,n,1) {
    fo(j,1,m) {
        if(i == n && j == 1) continue;
        if(mp[i][j] == 1) {
        } else {
            dp[i][j] = dp[i+1][j] + dp[i][j-1]; 
            dp[i][j] %= 2333;
        }
    }
}

// fo(i,1,n) {
// fo(j,1,m) {
// cout<<dp[i][j]<<' ';
// }cout<<endl;
// }

cout<<dp[1][m]<<endl;

}

signed main(){
clapping();TLE;

// int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}

/*样例区

*/

//------------------------------------------------------------

标签:read,res,while,int,flag,DP,迷雾,1010,dp
来源: https://www.cnblogs.com/er007/p/16449234.html