莞工oj 4 馬欄過河卒

2021-10-10 04:56:09 字數 1972 閱讀 3233

題目:

思路:這是一道dp型別題。(決策問題,同分治法解決不太一樣,分治法是有聯絡的,而這個決策之間沒什麼特別聯絡。)

分析這道題目,由於兵只能向下或者向右走,不難發現其動態方程

dp[i][j] = dp[i-1][j] + dp[i][j-1]

也就是點i,j的路徑總數是等於(i-1,j)與(i,j-1)路徑總數的和。

並且i=0和j=0的行和列路徑總數都是1。

障礙點(馬的位置及其一步可以走到的位置)的路徑總數都是0。

所以就可以解出這道題了。

一開始用python寫了:

a =[0

,-1,

-2,-

2,-1

,1,2

,2,1

]b =[0

,2,1

,-1,

-2,-

2,-1

,1,2

]p =[[

-1for i in

range(16

)]for i in

range(16

)]print

(p)n,m,x,y =

map(

int,

input()

.split())

for i in

range

(m+1):

p[i][0

]=1for j in

range

(n+1):

p[0]

[j]=

1for i in

range(9

):if x+a[i]

>=

0and y+b[i]

>=0:

p[x+a[i]

][y+b[i]]=

0for i in

range(1

,m+1):

for j in

range(1

,n+1):

if(p[i]

[j]==-1

):p[i]

[j]=p[i-1]

[j]+p[i]

[j-1

]print

(p[m]

[n])

後來發現沒有通過。

一開始沒有想明白,後來發現自己蠢了…

忘記考慮障礙點對於p[0][i]和p[i][0]路徑總數的影響。

之後就用c++寫了(演算法題還是用c好一些)

c++:

#include

#include

#include

#include

using

namespace std;

//用於計算馬的落點

const

int change_x=

;const

int change_y=

;//輸入

int end_x,end_y;

int horse_x,horse_y;

long

long dp[30]

[30];

//路線數量 ---由於計算的資料可能大於int 所以使用long long

bool map[15]

[15];

//能不能走

intmain()

//遞推

for(

int i=

0;i<=end_x;i++

)else

else

if(i==

0&&j>0)

else

if(i>

0&&j==0)

else}}

} cout<

[end_y]

;return0;

}

莞工oj 6 排隊買票

題目 思路解析 還是一道深度搜尋的題目。仔細解析這道題目,再每次選擇數的時候都只有兩種情況 選擇一元小朋友 對應情況 只要還有一元小朋友沒有排序即可作出此選擇 選擇兩元小朋友 對應情況 之前選擇的一元小朋友個數大於選擇兩元小朋友個數 即有餘額的情況 則可作出此選擇。而搜尋的出口就是所有小朋友都排序完...

第九周OJ4等比數列

問題及 煙台大學計算機與控制工程學院 檔名稱 等比數列 作 者 展一 題目描述 已知q與n,求等比數列之和 1 q q2 q3 q4 qn 輸入 輸入資料含有不多於50對的資料,每對資料含有乙個整數n 1 n 20 乙個小數q 0 q 2 輸出 對於每組資料n和q,計算其等比數列的和,精確到小數點後...