百度之星astar 413 problem1

2021-06-14 01:55:32 字數 2127 閱讀 2406

做這道題花了很多時間,所以沒有長期的訓練,想要在短時間內解決這種題目還是有一定的難度。

du熊的機械人

description

du熊正在玩乙個別人剛送給它的機械人。這個機械人只能在乙個棋盤中行走,棋盤的左上角格仔為(0, 0),右下角格仔為(x, y)。

du熊控制這個機械人從棋盤的左上角,走到右下角,再從右下角回到左上角。當機械人從左上角走到右下角的過程中,如果它當前所在格仔為(x, y),則它只能走到(x+1, y)或(x, y+1)的格仔;當機械人從右下角走回左上角的過程中,如果它當前所在的格仔為(x, y),則它只能走到(x-1, y)或(x, y-1)的格仔。並且du熊要求機械人從左上角走到右下角再走回左上角的整個過程中,最多經過同乙個格仔一次。

請你幫du熊計算出這個機械人一共有多少種不同的路線。

input

輸入的第一行為乙個正整數t(0接下來的t行,每行有兩個整數,分別表示x和y。(1<=x,y<=1000)

output

對每組輸入資料,輸出乙個整數,表示機械人不同的路線數量。

sample input

31 1

1 1000

3 4sample output22

100問題分析:

群舉是第乙個直覺的做法,但題目裡要求x,y可以到1000,而x,y達到10就已經是比較大的乙個數,這個數目至少相當於從20的數中選10個出來。

第二想法是動態規劃,因為每個點的運動使其構成樹結構,但狀態轉移也不能很容易的找出來

定義s(m,n,x):滿足某種條件的路徑的數目,這些條件包括:

1、從座標(0,0)出發,經過(m,n),終點是(0,1)

2、經過每個座標最多一次

3、經過(x,0)

任一條逆時針可以走的路徑,順時針也滿足題目要求 ,所以

2*s(m,n,0)就是題目要求的值。而

根據我們的定義,終點是

(0,1),那麼第一步一定是(0,0)->(1,0),

s(m,n,0)等於s(m,n,1)。

接下來定義的狀態轉移:

終點是 (0,1),可以從兩個方向到達(0,1)

1、最後一步(1,1)->(0,1)

這種情況下,滿足條件的路徑有這樣的形式:(0,0)->(1,0)->...(m,n)->...->(1,1)->(0,1)

其數目等於

形式為(1,0)->...(m,n)->...->(1,1)的所有滿足條件的路徑的數目,等於形式為(0,0)->...(m-1,n)->...->(0,1)的的所有滿足條件的路徑的數目,等於s(m-1,n,x-1)

2、最後一步(0,2)->(0,1)

由定義,一定存在某一步:(x,0)->(x,1),這個是顯然的

對每個1<=x<=m,我們計算滿足形式(0,0)->...->(x,0)->(x,1)->...->

(m,n)->...->(0,2)->(0,1)的所有路徑的數目,定義這個數目為t(m,n,x)

所有經過

(x,0)形式滿足(0,0)->...->(x,0)...->

(m,n)->...->(0,2)->(0,1)的路徑的數目為sum(t(m,n,x:m))

怎麼求t(m,n,x)?觀察可以發現,t(m,n,x)恰好等於s(m,n-1,x)

總結一下

s(m,n,x)= s(m-1,n,x-1) + sum(s(m,n-1,x:m)

邊界條件:

我們總要要求起始點是(0,0)終點是(0,1),則s(m,0,x)=0,應為沒有

終點(0,1)不存在

s(0,n,x) = 0,

s(0,0,0)=1,

s(0,1,0)=1,

這幾個條件畫個圖都能簡單的推出來

空間複雜度:o(m*m*n),時間複雜度

o(m*m*n)

最後乙個問題,考慮到結算的結果特別大,狀態轉移矩陣可能要使用大數的資料結構

我的實現

#define al 1000+1

long pathcount(const size_t m, const size_t n)

s[m][n][0] = s[m][n][1];

} }return 2*s[m][n][0];

}

百度之星Valley Numer

problem description 眾所周知,度度熊非常喜歡數字。它最近發明了一種新的數字 valley number,像山谷一樣的數字。當乙個數字,從左到右依次看過去數字沒有出現先遞增接著遞減的 山峰 現象,就被稱作 valley number。它可以遞增,也可以遞減,還可以先遞減再遞增。在遞...

2018 百度之星

資格賽 problem a problem b problem c problem d problem e problem f 初賽 a problem a 簽到題problem b 用deque雙端佇列模擬即可。插入的時候用insert。problem c problem d problem e ...

百度之星B題

include include include include include include includeusing namespace std define clr arr,v memset arr,v,sizeof arr const double inf 1e 10 struct node...