洛谷P1220 關路燈

2022-05-20 12:30:15 字數 631 閱讀 5319

題目有點難描述,內容請直接看原題。。

題解:可以發現人在關路燈時無論走什麼樣的路徑,從巨集觀上來看被關的燈總是構成一段包含初始點的連續區間。比如要關掉下標為 l (l < st)的燈,則一定要先關掉下標為 l+1 的燈,可以發現這應該是乙個區間dp的題目。有了區間之外,還要記錄的資訊是對於區間 [l,r],老張在區間的哪個端點處,因此 dp[l][r][0/1] 表示區間 [l,r] 內的路燈已經都被關閉,且老張在左端點/右端點處的最小功率消耗是多少,轉移方程在**中給出,時間複雜度為 \(o(n^2)\)。

**如下

#include using namespace std;

const int maxn=51;

typedef long long ll;

int n,st;

ll pos[maxn],w[maxn],sum[maxn];

ll dp[maxn][maxn][2];// 0 -> left 1 -> right

void read_and_parse()

}void solve()

} printf("%lld\n",min(dp[1][n][0],dp[1][n][1]));

}int main()

洛谷 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 記錄...