區間DP code vs 1258 關路燈

2022-05-28 03:09:09 字數 1279 閱讀 1402

1258 關路燈

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 大師 master

多瑞卡得到了乙份有趣而高薪的工作。每天早晨他必須關掉他所在村莊的街燈。所有的街燈都被設定在一條直路的同一側。

多瑞卡每晚到早晨5點鐘都在晚會上,然後他開始關燈。開始時,他站在某一盞路燈的旁邊。

每盞燈都有乙個給定功率的電燈泡,因為多端卡有著自覺的節能意識,他希望在耗能總數最少的情況下將所有的燈關掉。

多端卡因為太累了,所以只能以1m/s的速度行走。關燈不需要花費額外的時間,因為當他通過時就能將燈關掉。

編寫程式,計算在給定路燈設定,燈泡功率以及多端卡的起始位置的情況下關掉所有的燈需耗費的最小能量。

輸入描述 input description

輸入檔案的第一行包含乙個整數n,2≤n≤1000,表示該村莊路燈的數量。

第二行包含乙個整數v,1≤v≤n,表示多瑞卡開始關燈的路燈號碼。

接下來的n行中,每行包含兩個用空格隔開的整數d和w,用來描述每盞燈的引數,其中0≤d≤1000,0≤w≤1000。d表示該路燈與村莊開始處的距離(用公尺為單位來表示),w表示燈泡的功率,即在每秒種該燈泡所消耗的能量數。路燈是按順序給定的。

輸出描述 output description

輸出檔案的第一行即唯一的一行應包含乙個整數,即消耗能量之和的最小值。注意結果小超過1,000,000,000。

樣例輸入 sample input

2 25 8

6 18 7

樣例輸出 sample output

資料範圍及提示 data size & hint

貼**

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int

n,v;

7intin;

8int d[1010],w[1010];9

int f[1010][1010],g[1010][1010

];10

//f[i][j] 關掉[i,j]的代價,現在處在i,從右向左而來

11//

g[i][j] 關掉[i,j]的代價,現在處在j,從左向右而來

1213

intmain()

27 printf("

%d\n

",min(f[1][n],g[1

][n]));

28return0;

29 }

區間DP 關路燈

給你一條直線,直線上有 n 個點,每個點每秒都有消耗能量,現在再給你個點 m 代表你當前的位置,現在你要去碰這些點,當你碰到這些點時,這些點就不再消耗能量,你的速度是1m s,現在讓你求碰完這些點消耗能量最少,且最少值為多少 看了一下題,哎,這題還寫了不能用貪心,那就dp咯,還發現每次只能碰乙個點,...

P1220 關路燈 (區間dp)

題目鏈結 題解 在關完路燈 i j 時,老張要麼在 i 處,要麼在 j 處。1.要麼是在關完 j 路燈後再回頭關 i 路燈的,要麼是在關完第 i 1 盞後繼續前進關掉 i 的,在這兩種情況中選擇耗能最小的。2.要麼是在關完 i 路燈後再回頭關 j 路燈的,要麼是在關完第 j 1 盞後繼續前進關掉 j...

Luogu P1220 關路燈 (區間dp)

某一村莊在一條路線上安裝了 n nn 盞路燈,每盞燈的功率有大有小 即同一段時間內消耗的電量有多有少 老張就住在這條路中間某一路燈旁,他有一項工作就是每天早上天亮時一盞一盞地關掉這些路燈。為了給村里節省電費,老張記錄下了每盞路燈的位置和功率,他每次關燈時也都是盡快地去關,但是老張不知道怎樣去關燈才能...