生活随笔
收集整理的這篇文章主要介紹了
「木」迷雾森林
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鏈接:
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format:%lld
題目描述
賽時提示:保證出發點和終點都是空地
帕秋莉掌握了一種木屬性魔法 這種魔法可以生成一片森林(類似于迷陣),但一次實驗時,帕秋莉不小心將自己困入了森林
帕秋莉處于地圖的左下角,出口在地圖右上角,她只能夠向上或者向右行走
現在給你森林的地圖,保證可以到達出口,請問有多少種不同的方案
答案對2333取模
輸入描述:
第一行兩個整數m , n表示森林是m行n列 接下來m行,每行n個數,描述了地圖 0 - 空地 1 - 樹(無法通過)
輸出描述:
一個整數表示答案
示例1
輸入
3 3
0 1 0
0 0 0
0 0 0
輸出
3
題解:
經典的遞推式,記憶化搜索
從左下角↙走到右上角↗
式子:
dp [ i] [ j ] = dp [ i - 1 ] [ j ] + d p [ i ] [ j - 1 ]
意義:當前這個點(i,j),是由他的左側(i-1,j)和下側(i,j-1)走到的
話說出題人真好,還提供了快讀模板
代碼:
#include<bits/stdc++.h>
using namespace std
;
typedef long long ll
;
const int mod
=2333;
const int maxn
=3004;
bool a
[maxn
][maxn
];
ll dp
[maxn
][maxn
];
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
;
}int main()
{int n
,m
;read(m
);read(n
);for(int i
=1;i
<=m
;i
++)for(int j
=1;j
<=n
;j
++){read(a
[i
][j
]);if(i
==m
&&j
==1)dp
[i
][j
]=1;}for(int i
=m
;i
>=1;i
--)for(int j
=1;j
<=n
;j
++){if(a
[i
][j
]==1)continue;else if(i
!=n
||j
!=1)dp
[i
][j
]=(dp
[i
+1][j
]+dp
[i
][j
-1])%mod
;}cout
<<dp
[1][n
];return 0;
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的「木」迷雾森林的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。