分析一下,明顯的區間dp,我們以dp [i] [j] [1]表示在i 到j的路燈已關,且老張在j點的情況下所用功耗的最小值,dp [i] [j] [0]則表示老張在i點,接著就是區間dp部分,見**
#include#include#include#include#includeusing namespace std;
const int maxn=1e2;
inline int read()
ch=getchar();
} while(ch>='0'&&ch<='9')
return ret*f;
}int n;
int sum[maxn];
int dp[maxn][maxn][3];//dp[i][j][1]表示i到j的路燈全部關閉且老張在右邊,反之
int w[maxn];
int l[maxn];
int m;
int main()
memset(dp,127,sizeof(dp));
dp[m][m][0]=dp[m][m][1]=0;
for(int len=1;len來解釋幾點吧
因為要取最小值,便於min的取值,將dp陣列初始化為較大的乙個數
因為我們要最終取值為起點為老張的位置的情況
所以將老張初始位置的dp值設定為0。
大該就是這樣了。
洛谷P1220 關路燈(區間dp)
某一村莊在一條路線上安裝了n盞路燈,每盞燈的功率有大有小 即同一段時間內消耗的電量有多有少 老張就住在這條路中間某一路燈旁,他有一項工作就是每天早上天亮時一盞一盞地關掉這些路燈。為了給村里節省電費,老張記錄下了每盞路燈的位置和功率,他每次關燈時也都是盡快地去關,但是老張不知道怎樣去關燈才能夠最節省電...
洛谷 P1220 關路燈 區間DP
某一村莊在一條路線上安裝了 n 盞路燈,每盞燈的功率有大有小 即同一段時間內消耗的電量有多有少 老張就住在這條路中間某一路燈旁,他有一項工作就是每天早上天亮時一盞一盞地關掉這些路燈。為了給村里節省電費,老張記錄下了每盞路燈的位置和功率,他每次關燈時也都是盡快地去關,但是老張不知道怎樣去關燈才能夠最節...
洛谷P1220關路燈 區間dp
某一村莊在一條路線上安裝了 n 盞路燈,每盞燈的功率有大有小 即同一段時間內消耗的電量有多有少 老張就住在這條路中間某一路燈旁,他有一項工作就是每天早上天亮時一盞一盞地關掉這些路燈。為了給村里節省電費,老張記錄下了每盞路燈的位置和功率,他每次關燈時也都是盡快地去關,但是老張不知道怎樣去關燈才能夠最節...