題目有點難描述,內容請直接看原題。。
題解:可以發現人在關路燈時無論走什麼樣的路徑,從巨集觀上來看被關的燈總是構成一段包含初始點的連續區間。比如要關掉下標為 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 記錄...