題目描述
牛牛有乙個n*m的迷宮,對於迷宮中的每個格仔都為』r』,『d』,'b』三種型別之一,'r』表示處於當前的格仔時只能往右邊走』d』表示處於當前的格仔時只能往下邊走,而』b』表示向右向下均可以走。
我們認為迷宮最左上角的座標為(1,1),迷宮右下角的座標為(n,m),除了每個格仔有向右移動以及向下移動的限制之外,你也不能夠走出迷宮的邊界。
牛牛現在想要知道從左上角走到右下角不同種類的走法共有多少種,請你告訴牛牛從(1,1)節點移動到(n,m)節點共有多少種不同的移動序列,請你輸出方案數對109+710^9+7109+7取餘數後的結果。
我們認為兩個移動序列是不同的,當且僅當移動序列的長度不同,或者在某一步中採取了不同的移動方式。
輸入描述:
第一行輸入兩個正整數n,m(1≤n,m≤50)(1 \leq n,m \leq 50)(1≤n,m≤50)表示迷宮的大小是n行m列。
接下來n行,每行輸入乙個長度為m的字串,字串中僅包含大寫字母』d』,『r』,『b』。
輸出描述:
輸出一行乙個整數,表示方案數對109+710^9+7109+7取餘數後的結果。
示例1輸入
5 5rbbbr
bbbbb
bbbdb
bdbbb
rbbbb
輸出這個題用dp演算法(動態規劃)來解,先用乙個與迷宮塊大小相同的二維陣列來儲存從[1][1]到[n][m]的路徑數字,這個思路我覺得和字首和有異曲同工之妙。如果說,從[1][1]能走到[n][m],那麼em[n][m]>0並且其內容就是可以走的路徑數;如果從[1][1]走不到[n][m],那麼em[n][m]==0。
#include
using
namespace std;
#define ll long long
const ll mod=
1e9+7;
int n,m;
char ch[70]
[70];
ll em[70]
[70];
intmain()
em[1]
[1]=
1;for(
int i=
1;i<=n;i++)if
(ch[i]
[j]==
'r')
if(ch[i]
[j]==
'b')}}
printf
("%lld\n"
,em[n]
[m])
;return0;
}
牛客寒假訓練營4 F
題目傳送門 這個題其實是一道送分題 可是我被卡在神 gai 奇 si 的e題上了,沒有時間寫這個水題了 e題是如此的神 e 奇 xin 以至於我實在是不想給它單獨寫一篇總結 不就是乙個貪心 高精 讀一遍題,稍稍畫圖看一下就知道是要你求樹上有幾對點之間的距離為偶數在稍微觀察一下就能發現,深度為奇數的節...
牛客寒假訓練營5 F
題目傳送門 又到了開心的2小時過6題三小時卡一題的環節 太菜了 qwq 這一切一切的原因是什麼呢?ta這個小 zhi 機 zhang 靈 er 鬼 tong 把這句話看丟了 首 du 見 cuo 這道題的ta就很興奮的認為這不就是乙個組合數嘛 然後就寫了半天組合數 對dp的敏銳程度還不夠 寫組合數就...
牛客寒假演算法基礎演算法訓練營2
1 座與重修費 題目描述 期末考試結束了,座發現很多人掛了大物,只能等著第二年重修,還要交400元的重修費。座突然想起有個學長和他講過,如果學校哪一年缺錢了,那一年的大物試卷就會特別難。現在 座有了所有人的成績,座想知道如果所有掛科的人都在第二年重修,學校能賺多少重修費?掛科是指一門課的分數小於60...