1010 「木」迷雾森林 线性DP 动态规划 快读模板
链接:https://ac.nowcoder.com/acm/problem/53675
来源:牛客网
题目描述
</h2>
赛时提示:保证出发点和终点都是空地
帕秋莉掌握了一种木属性魔法
这种魔法可以生成一片森林(类似于迷阵),但一次实验时,帕秋莉不小心将自己困入了森林
帕秋莉处于地图的左下角,出口在地图右上角,她只能够向上或者向右行走
现在给你森林的地图,保证可以到达出口,请问有多少种不同的方案
答案对2333取模
输入描述:
第一行两个整数m , n表示森林是m行n列
接下来m行,每行n个数,描述了地图
0 - 空地
1 - 树(无法通过)
输出描述:
一个整数表示答案
备注:
对于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(要读入的数))
</h2>
帕秋莉处于地图的左下角,出口在地图右上角,她只能够向上或者向右行走
现在给你森林的地图,保证可以到达出口,请问有多少种不同的方案
答案对2333取模
输入描述:
第一行两个整数m , n表示森林是m行n列
接下来m行,每行n个数,描述了地图
0 - 空地
1 - 树(无法通过)
输出描述:
一个整数表示答案
备注:
对于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];
template
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;
}
/*样例区
*/
//------------------------------------------------------------