u105 路徑計數2

2021-09-28 10:07:29 字數 1161 閱讀 3152

time limit: 1 second

memory limit: 128 mb

乙個n×n的網格,你一開始在(1, 1),即左上角。每次只能移動到下方相鄰的格仔或者右方相鄰的格仔,問到達(n, n),即右下角有多少種方法。 但是這個問題太簡單了,所以現在有m個格仔上有障礙,即不能走到這m個格仔上。

輸入檔案path.in的第1行包含兩個非負整數n,m,表示了網格的邊長與障礙數。 接下來m行,每行兩個不大於n的正整數x, y。表示座標(x, y)上有障礙不能通過,且有1≤x, y≤n,且x, y至少有乙個大於1,並請注意障礙座標有可能相同。

輸出檔案path.out僅包含乙個非負整數,為答案mod 100003後的結果。

對於20%的資料,有n≤3; 對於40%的資料,有n≤100; 對於40%的資料,有m=0; 對於100%的資料,有n≤1000,m≤100000。

3 1

3 1

5
【題解】

這題和馬攔過河卒那題很像。

但是這題更好做了。不用你處理出馬控制的區域。直接告訴你哪些格仔不能走了。

一開始和(1,1)在同一行和同一列的位置都置為1;遇到不能走的則停止置。

然後用遞推公式

a[i][j] = (a[i-1][j]+a[i][j-1] )%100003遞推即可。

【**】

#include #include int n,m,a[1001][1001] = ;

bool bo[1001][1001];

void input_data()

for (int i = 1;i <= n;i++) //和(1,1)在同一行或同一列都只有一種到達方式。如果有不能走到的點

if (bo[1][i])//在這一行或一列上。它後面被擋住的點就無法到達了。

a[1][i] = 1;

else

break;

for (int i = 1;i <= n;i++)

if (bo[i][1])

a[i][1] = 1;

else

break;

}void get_ans() //根據過河卒的思路來遞推答案即可。

void output_ans()

int main()

P1176 路徑計數2

題目描述 乙個n n的網格,你一開始在 1,1 即左上角。每次只能移動到下方相鄰的格仔或者右方相鄰的格仔,問到達 n,n 即右下角有多少種方法。但是這個問題太簡單了,所以現在有m個格仔上有障礙,即不能走到這m個格仔上。輸入輸出格式 輸入格式 輸入檔案第1行包含兩個非負整數n,m,表示了網格的邊長與障...

HDU 6116 路徑計數

普通生成函式常用於處理組合問題,指數生成函式常用於處理排列問題。考慮 對於 a 個 a 分為很多堆,這麼分的方案數是 c 然後對於每一堆我們看成乙個數來放,並且所有堆都這樣做,這樣的話總的方案數量是 frac 就算所有一堆看成的數的排列是不存在相鄰相等的,至少都有 n i j k l 對相鄰的相同的...

洛谷 P1176 路徑計數2

乙個n n的網格,你一開始在 1,1 即左上角。每次只能移動到下方相鄰的格仔或者右方相鄰的格仔,問到達 n,n 即右下角有多少種方法。但是這個問題太簡單了,所以現在有m個格仔上有障礙,即不能走到這m個格仔上。輸入格式 輸入檔案第1行包含兩個非負整數n,m,表示了網格的邊長與障礙數。接下來m行,每行兩...