AT_wtf19_d 子结论求助证明
  • 板块学术版
  • 楼主max67
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/2 16:14
  • 上次更新2023/11/2 18:57:13
查看原帖
AT_wtf19_d 子结论求助证明
223891
max67楼主2023/11/2 16:14

我觉得发学术板看的人应该会多一点。

给一篇题解帮助理解。

子问题就是说:

  • 记 S=(x,y)∣x≥0,y≥0)S={(x,y)|x\ge 0,y\ge 0)},并给定 kk。
  • 设 f(x)f(x) 表示在 SS 内选择恰好 kk 个点,使得他们的横坐标之和恰好为 xx,此时纵坐标之和的最小值,其中 x≥0x\ge 0。
  • 显然 f(x)f(x) 单调不增,但是他并不是凸的,详见下面的例子:

当 k=5k=5 时,f(0)=(0+1+2+3+4)=10f(0)=(0+1+2+3+4)=10,f(1)=(0+0+1+2+3)=6f(1)=(0+0+1+2+3)=6,f(2)=(0+1+0+1+2)=4f(2)=(0+1+0+1+2)=4,f(3)=(0+0+1+0+1)=2f(3)=(0+0+1+0+1)=2,f(4)=(0+0+1+0+1)=2f(4)=(0+0+1+0+1)=2,f(5)=(0+0+0+0+1)=1f(5)=(0+0+0+0+1)=1

但是你可以发现一个贪心:对于 f(i)f(i) 的最优决策,假设他是从 f(i−1)f(i-1) 转移过来的。

考虑任意一个 f(i−1)f(i-1) 的最优决策,记 CxC_x 为横坐标为 xx 时放的点数之和,显然这些点的坐标分别为 (x,0),(x,1)...(x,Cx−1)(x,0),(x,1)...(x,C_x-1),并且有:∑xCx×x=i−1\sum_x C_x\times x=i-1 。

当从 i−1i-1 推到 ii 时,我们假装只会改变 O(1)O(1) 个元素。那么我们考虑将其中一个元素往上移。假设移动的元素的横坐标为 xx,那么大概是选择其中 yy 最大的一个元素进行移动,即把 (x,Cx)(x,C_x) 移动到 (x+1,Cx+1+1)(x+1,C_{x+1}+1),那么在操作之后有:

f(i)=f(i−1)+Cx−Cx+1Cx−1→Cx,Cx+1+1→Cx+1f(i)=f(i-1)+C_{x}-C_{x+1}\\ C_x -1 \to C_x,C_{x+1}+1 \to C_{x+1}\\

那么贪心的想,我们大概是选择 Cx−Cx+1C_x-C_{x+1} 最大并且 xx 最小的一个,但是我不会证明正确性,有巨佬能帮帮吗QAQ。

或者提供另外的证明方式,只要能够说明 (∑x,∑y)×(p,q)(\sum x,\sum y)\times (p,q) 是凸的并且覆盖到了上面 ff 函数的每一个点(当两个点的取值相同时删除横坐标靠后的点)。

谢谢QWQ。

(另外,如果上述贪心成立,那么我们令 g(y)g(y) 表示使纵坐标之和最小时候纵坐标之和等于 yy,在满足这个条件下横坐标之和的最小值。那么 g(y)g(y) 容易证明是一个下凸函数)

2023/11/2 16:14
加载中...