在乙個 n×n
n\times n
n×n 矩陣中每一行都有一條線段,找出從 (1,
1)
(1,1)
(1,1
) 出發不重不漏地遍歷每一條線段並走到 (n,
n)
(n,n)
(n,n
) 結束所需的步數。
使用 dp。
考慮設 f[i
][0/
1]
f[i][0/1]
f[i][0
/1] 表示當前以及遍歷完了第 i
ii 行的線段,在左(0
00)/ 右(1
11)端點結束遍歷(即準備從這個端點跳到下一行)。
那麼我們可以考慮兩行之間銜接的四種情況:
那麼對於 f[i
][0]
f[i][0]
f[i][0
] 和 f[i
][1]
f[i][1]
f[i][1
] ,我們選擇上一行的最優端點轉移下來就行了。
初始化:
如果剛開始到左端點的話要走兩遍線段長,如果右端點可以直接一次性走過去。
輸出:
由於 f
ff 的值是以線段端點為結束的,而題目要求以 (n,
n)
(n,n)
(n,n
) 為終點,所以要走到 nnn。
#include
using
namespace std;
int f[
20005][
3];//設f[i][0]表示走完了第i行且走到左端點;設f[i][1]表示走完了第i行且走到了右端點。
intabs
(int x)
intmin
(int x,
int y)
int l[
20005
],r[
20005];
intmain()
f[1][
0]=l[1]-
1+(r[1
]-l[1]
)*2;
f[1][
1]=r[1]-
1;for(
int i=
2;i<=n;i++
)printf
("%d\n"
,min
(f[n][0
]+n-l[n]
,f[n][1
]+n-r[n]))
;return0;
}
洛谷 P2007 魔方
常神牛從來沒接觸過魔方,所以他要借助計算機來玩。即使是這樣,他還是很菜。常神牛家的魔方都是3 3 3的三階魔方,大家都見過。更正 3 4以圖為準。作為一名菜鳥,常神牛從網上搜了一篇攻略,並找人翻譯成了他自己會做的方法。現在告訴你他的魔方情況,以及他從網上搜到的攻略,請你求出最後魔方變成什麼樣子。輸入...
洛谷P3761 TJOI2017 城市
從加里敦大學城市規劃專業畢業的小明來到了乙個地區城市規劃局工作。這個地區一共有ri座城市,1條高速公路,保證了任意兩運城市之間都可以通過高速公路相互可達,但是通過一條高速公路需要收取一定的交通費用。小明對這個地區深入研究後,覺得這個地區的交通費用太貴。小明想徹底改造這個地區,但是由於上司給他的資源有...
洛谷P3976 TJOI2015 旅遊
為了提高智商,zjy 準備去往乙個新世界去旅遊。這個世界的城市布局像一棵樹,每兩座城市之間只有一條路徑可以互達。每座城市都有一種寶石,有一定的 zjy 為了賺取最高利益,她會選擇從 a 城市 再轉手賣到 b 城市。由於zjy買寶石時經常賣萌,因而凡是 zjy 路過的城市,這座城市的寶石 會 讓我們來...