P1220 關路燈 區間DP

2022-06-12 21:27:09 字數 760 閱讀 2176

道路上有\(n\)盞燈,每盞燈有兩個屬性,座標和功率。

老張的速度為\(1m/s\) 。

初始給出老張在第幾盞燈。

當到達某盞燈時 老張可以花費\(0\) 秒關掉一盞燈,確定一種路線使所有燈的耗能最小。

\[n \leq 50,1\leq c \leq n

\]令\(f[i][j]\)表示從\(i\) 到\(j\) 關掉 所有燈的總耗能。

那麼進一步考慮,令\(f[i][j][0]\) 表示關掉\(i\)到\(j\)的燈後,老張站在\(i\)點。

令\(f[i][j][1]\) 表示關掉\(i\)到\(j\)後,老張站在\(j\)點。

那麼考慮狀態轉移。

有\[f[i][j][0] = min(f[i + 1][j][0] + (a[i + 1] - a[i]) \times (sum[i] + sum[n] - sum[j]),

\\f[i + 1][j][1] + (a[j] - a[i]) \times (sum[i] + sum[n] - sum[j]));

\]同理可以得到\(f[i][j][1]\)

這裡注意初始化

int a[55];

int b[55];

int sum[55];

int f[55][55][2];

int main()

int ans = min(f[1][n][0], f[1][n][1]);

cout << ans;

}

P1220 關路燈 (區間dp)

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

P1220 關路燈 區間dp

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

洛谷P1220 關路燈(區間dp)

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