P7137 [THUPC2021 初赛] 切切糕(博弈 概率)

P7137 [THUPC2021 初赛] 切切糕

-> 双倍经验:Game on Sum (Hard Version)

\(n\) 块方蛋糕,绝顶聪明的 Sight 和 Sirrel 决定将每块蛋糕都分成两块各自品尝。Sight 会依次将每块蛋糕分成两块,而 Sirrel 有 \(m\) 次优先选择权。

对于 \(n\) 轮操作,每一次 Sight 会先选择一块蛋糕,将它随意分成任意大小分配的两块(可以是实数);如果 Sirrel 还有剩余的优先选择权,她可以选择一块,否则由 Sight 优先选择。

最终两人都希望自己得到的蛋糕总量最大,求 Sight 能得到的最大蛋糕总和。

\(n\le 2500,A_i\le 5\times 10^4\)

由于优先选择权在 Sirrel 手里,我们不妨以她作为主视角考虑问题。而且如果以 Sight 的视角来看,直接由方程解出的 \(x\) 可能会大于 \(A_i\) 不合法,而 Sirrel 直接不适用优先权即可。

\(\bigstar\texttt{Important}\):一般博弈论的 DP 题都是从后往前 DP,即从确定的终止状态向初始状态 DP,因为绝顶聪明这一条件使得双方都能预测到他们当前的行为对后续局面的影响,可以说只有后效性而没有前效性。若 \(i, j\) 确定,则两人之前的决策对当前决策无影响。

因此,设 \(f_{i,j}\) 表示已经分完了 \(i\) 块蛋糕,Sirrel 使用了 \(j\) 次选择权的最大收益,设这一次切出的蛋糕大小为 \(x>A_i-x\),分两类讨论:

  • 如果使用了一次选择权,收益为 \(f_{i-1,j-1}+x\)
  • 如果没有使用,收益为 \(f_{i-1,j}+A_i-x\)

那么综合收益为 \(\min\{f_{i-1,j-1}+x,f_{i-1,j}+A_i-x\}\)

那么如果可爱邪恶的 Sight 要让她尽可能收益少,就需要让两者相等。则收益为 \(\dfrac{f_{i-1,j-1}+f_{i-1,j}+A_i}{2}\)

直接 DP 就行啦!。。?真的吗?

发现可爱邪恶的 Sight 会先切大小较小的蛋糕,这会让爱可爱的 Sirrel 更加为难。先排序。

#define Maxn 2505
int n,m;
double a[Maxn],sum[Maxn],f[Maxn][Maxn];
bool cmp(double x,double y){ return x>y; }
int main()
{
	n=rd(),m=rd();
	for(int i=1;i<=n;i++) scanf("%lf",&a[i]);
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
	for(int i=1;i<=n;i++)
	{
		f[i][0]=0,f[i][i]=sum[i]/2.0;
		for(int j=1;j<i;j++) f[i][j]=fmax((f[i-1][j]+f[i-1][j-1]+a[i])/2.0,f[i-1][j]);
	}
	printf("%.6lf\n",sum[n]-f[n][m]);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值