专栏文章
题解:SP33372 LARMY - Lannister Army
SP33372题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minhh201
- 此快照首次捕获于
- 2025/12/02 02:29 3 个月前
- 此快照最后确认于
- 2025/12/02 02:29 3 个月前
这是一篇补充决策单调性的证明。
贡献的递推式就不加以说明了,题解都写的非常棒。
代表前 个数字,分割了 组时的最小不快乐值之和。那么可以写出如下的式子。
通过决策的单调性我们进行优化,可以写出下面的代码。
的含义时前 个数字,第 刀砍的位置,也就是分出第 段的那一刀的位置。
CPP rep(k, 2, m) { //分割段数
rep_(i, n, k) { //右端点
rep(j, s[i][k - 1], s[i + 1][k]) { //左端点
if(dp[j][k - 1] + w[j + 1][i] < dp[i][k]) {
dp[i][k] = dp[j][k - 1] + w[j + 1][i];
s[i][k] = j;
}
}
}
}
那么,我们要证明 ,来说明代码的合理性。
这个是显然的,数字选的一样时,后面的刀比前面的刀位置靠后。
先不看多出来的这第 个数字,只考虑前 个数字。
由于 是为只取前 个数字时最优解,所以如果这一刀往前移了,只对于前 个数字的贡献,一定会更劣。
那么是否可以从第 个数字的贡献找补呢?答案是否定的。
因为我们要最小化逆序对的数量。现在刀往前移,能和 产生逆序对的数字数量一定不降。
因此 得证。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...