洛谷 P1220 關路燈

2021-08-11 09:27:26 字數 1028 閱讀 3285

本題是一道區間dp,很容易設計出狀態, dp[i][j]代表關掉i到j的路燈所耗的電量,但是對於新到乙個路燈來說,可以是原來直接來的,也可以是掉頭來的,於是還需要新增一維 0代表在區間的左端,1代表在區間的右端。從最開始所在的地方擴充套件。

因為涉及連續區間,可以採用字首和優化。

有如下轉移方程:

dp[i][j][1]=min(dp[i][j-1][1]+pre[i][j-1](dis[j]-dis[j-1]),dp[i][j-1][0]+pre[i][j-1](dis[j]-dis[i]));

dp[i][j][0]=min(dp[i+1][j][0]+pre[i+1][j](dis[i+1]-dis[i]),dp[i+1][j][1]+pre[i+1][j](dis[j]-dis[i]));

#include 

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=105;

int init()

while(c>='0'&&c<='9')

return fh*rv;

}int dp[maxn][maxn][2],dis[maxn],p[maxn],n,loc,pre[maxn][maxn];

int main()

for(int i=n;i>=1;i--)

pre[1][n]=0;

for(int i=1;i<=n-1;i++)

}memset(dp,0x3f,sizeof(dp));

dp[loc][loc][0]=dp[loc][loc][1]=0;

for(int i=loc;i>=1;i--)

}cout

<1][n][0],dp[1][n][1]);

fclose(stdin);

return

0;}

洛谷 P1220 關路燈

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

洛谷 P1220 關路燈

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

洛谷 P1220 關路燈

原本想用搜尋先超時一把 然後發現剪枝居然過了 include include include include include include using namespace std int d 10005 記錄燈的功率 int lef,righ,minx int run int x,int y 記錄...