设灯带下标从 1 到 n,第 i 位为 0 表示熄灭、为 1 表示点亮。目标是把至多 k 个 0 改成 1 后,最大化所有极大连续 1 段长度平方之和。
用动态规划。令 dp[i][g] 表示只考虑前 i 个位置、恰好把 g 个 0 改成 1 时的最大积分。转移时枚举最后一段连续点亮是否以位置 i 结尾:
0 都点亮,设其中 0 的个数为 z。若 z≤g,则可从 dp[j−1][g−z] 转移,并加上该段贡献 (i−j+1)2。一条长度为 n 的灯带上,每个位置的状态只能是熄灭 0 或点亮 1。一段连续点亮区间的贡献等于其长度的平方,整条灯带的积分定义为所有极大连续点亮区间的贡献之和。
你可以进行至多 k 次操作,每次操作把一个熄灭位置改为点亮。请计算操作结束后,灯带积分的最大可能值。
灯带长度不超过 500,操作次数不超过 500。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.