P9280 [AGM 2023 资格赛] Monty Hall 题解

一道数学题,有一点思维难度,代码难度为 0 0 0

思路:

每一次选的数都得相同,才可能打开所有的门。

观察题目可以发现,这个数列是单调不下降的,所以我们从后往前考虑。

先考虑 i = n i = n i=n 的情况:站在 1 1 1 号门前,移动 n n n 步后,又回到了 1 1 1 号门,死循环了,所以不考虑。

而在 i = n − 1 i = n-1 i=n1 的情况下,可以走到所有的门。以此类推,前面的其实都可以。但是由于数列的单调性,最后一个可行的肯定是代价最小的,所以我们选择 i = n − 1 i = n-1 i=n1。一共要走 n n n 次。

注意:刚开始你在 1 1 1 号门,是不可以直接将他打开的,你要先走 n n n 步将 1 1 1 号门打开才可以继续走,不然 1 1 1 号门就需要花费 C n − 1 C_{n-1} Cn1 的代价来打开,而 C n − 1 C_{n-1} Cn1 是有可能大于 C n C_n Cn 的,所以为了全部 AC,需要用 C n C_n Cn 的代价走,这样走 n − 1 n-1 n1 步的次数就变成了 ( n − 1 ) (n-1) (n1) 次。不难写出代码:

cout << C[n] + C[n-1] * (n-1) << endl;

小坑点:不开long long 见祖宗哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值