題目:
思路:這是一道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,計算其等比數列的和,精確到小數點後...