NOIP or 省選 登山 數學 DP

2021-07-06 00:23:22 字數 1456 閱讀 8388

惡夢是乙個登山愛好者,今天他來到了黃山。

俗話說的好,不走回頭路。所以在黃山,你只能往前走,或者往上走。並且很顯然的是,當你走到山脊的時候,你不能夠往上走,你只能往前走一步再往上走。

抽象一點而言就是,你可以把黃山視為乙個 n * n 格點圖,惡夢從(0,0)開始出發,要走到(n,n)。當他走到位置(x,y)的時候,它可以往(x + 1,y),或(x,y+1)走。並且當他走到(x,x)的時候,由於他已經處在了山脊上,所以他不能夠往(x,x+1)方向上走。

當惡夢興致勃勃準備開始爬山的時候,他的同伴告訴他,黃山由於年久失修,有一些位置出現了大坑,不能走。惡夢覺得更刺激了,但他想先知道他能有多少種方式走到黃山頂。

由於這個數字很大,所以你只需要將答案對 10^9 + 7 取模輸出即可。

第一行包括兩個整數 n,c,分別表示你可以把黃山視作乙個 n * n 的格點圖,並且黃山上面有 c 個

位置出現了大坑。

接下來的 c 行,每行包括兩個整數 x,y,表示 x,y 這個位置不能走。保證 x>=y,也就是說(x,y)必然在山上。

保證這 c 個點互不相同。

輸出只有乙個整數 ans,表示惡夢爬上山頂的路徑數對109

+7取模的值。

walk.in

7 4

6 5

5 3

2 1

7 1

walk.out

34對於 30%的資料,保證 n<=5000

對於另外 20%的資料,保證 c=0

對於另外 20%的資料,保證 c=1

對於 100%的資料,保證 n<=100000,c<=1000

保證對於(0,0),(n,n)不存在障礙點。

前排orz跪神犇

來自philips weng的題解

我才不會告訴你密碼gydg (!有智商!)

#include

#include

#include

#define fe first

#define se second

using

namespace

std;

typedef pair p;

const

int maxm = 1005,maxn = 200015,mo = int(1e9) + 7;

p block[maxm];

int fc[maxn],rv[maxn],f[maxn],n,c;

int quick(int a,int b)

int getc(int n,int m)

int normal(int s,int t,int x,int y)

int walk(int s,int t,int x,int y)

int main()

printf("%d\n", f[c]);

return

0;}

2013 省賽試題 有理數

二 完整 加法 public rational add rational x 返回頂部運算子 除法運算子,並且運算結果遵從向下取整。運算子 模運算,1 當運算子左邊小於右邊,結果就等於左邊 2 當運算子左邊大於右邊,結果就和算術中的取余是一樣的效果。返回頂部 public class test03 ...

藍橋杯省賽 方格填數C C

方格填數 如下的10個格仔 如果顯示有問題,也可以參看 圖1.jpg 填入0 9的數字。要求 連續的兩個數字不能相鄰。左右 上下 對角都算相鄰 一共有多少種可能的填數方案?請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。dfs,不多說,下面是 includ...

JZOJ 省選模擬 數二數(two)

第一行正整數n和p output 輸出乙個數,表示答案對p取模。sample input 樣例輸入1 3 1000000007 樣例輸入2 7 999997543 sample output 樣例輸出1 48樣例輸出2 要區別所有的位置,必須滿足每個位置的詢問集合不同。定義f i 表示一共i個位置的...