P1220 关路灯

发布时间 2023-12-07 18:45:05作者: 纯粹的

原题链接

导入

1.假如你是老头,你每次关灯最多有两个选择: 一.关最左边的灯 二.关最右边的灯
而你的目的是:使总耗电量最小

Q:那我能不能每次选去关功率大的那个灯呢?
A:不行,因为耗电量还与时间有关

Q:那我能不能每次选去关 路程(时间)\(*\)功率 较大的灯(即贪心)呢?
A:不行,假设这样一个场景:假设初始在第三个位置(总共8个位置),你的左边有一个功率非常小的灯A=1,左边的左边有一个功率非常大的灯B=1000000,而右边功率都大于A(两位数),如果贪心的话,就会一直选右边,导致B的耗电量巨大。这时候只要不贪心,先把B关掉,这样总耗电量就小了

深入

克服贪心,把当前看起来不划算的选项也算上,这就叫dp(也可以记忆化搜索穷举)。
该如何设计呢?
对于任意一段给定的序列,最后关掉的灯不是左边就是右边。
所以设\(dp[i][j][op](op\in\{0,1\})\)为关掉 i~j 内所有灯时的当前的所有灯的总耗电量,而非** i~j 的总耗电量**,其中op=0时代表最后关掉的灯在最左端,1代表最右端