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