【dp】币

本文介绍了如何使用动态规划解决一道概率问题,重点在于理解每堆个数对概率无关这一核心思想,并通过补集策略来求解。作者提到自己未能推导出最优状态和转移,但理解了先手和后手成功概率相加为1的关键点。通过预处理概率并乘以相应数值,可以得到问题的答案。文章中包含了简化过的LYP的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目献上(LYP君原创!)

1 币 (coin)
1.1 题目描述
有一排硬币堆,两个人轮流取硬币。每个选手随机取最左边或者最右边的一堆硬币。求先手期望取得的硬币数。
1.2 输入格式
本题有多组测试数据。
第一行一个数 T ,表示数据组数。
对于每组测试数据,第一行一个正整数 n ,表示有多少堆硬币。
第二行 n 个非负整数,依次表示每一堆硬币的个数。
1.3 输出格式
对于每组测试数据,输出一行一个数,表示先手期望取得的硬币数。保留 3 位小数。
1.4 样例输入
2
3
1 4 9
4
5 5 5 5
1.5 样例输出
9.500
10.000
1.6 样例解释
对于第一个测试数据:
先手第一次取  后手第一次取 先手第二次取 先手取得的石子数 出现的概率
     1		   4		9 	       10          0.25
     1		   9   	        4  	       5	   0.25
     9		   1	        4 	       13	   0.25
     9		   4  		1	       10     	   0.25
所以先手期望取得的硬币数为:
10 × 0.25 + 5 × 0.25 + 13 × 0.25 + 10 × 0.25 = 9.5
对于第二个测试数据:
由于两个人都会取 2 堆石子,且每堆石子都是 5 个,所以无论怎么取答案都是 10 。


我能够想到的就是概率与每堆个数无关

然后用补集的思想解

但是因为我比较弱,所以没有推出正确并且优的状态和转移,然后记忆化的写法真心不熟,丑又WA

不废话了写正解


f[i][j]表示从连续的堆数为i的取此连续的堆中的第j堆的概率

假如f[i][j]是先手成功的概率,而g[i][j]是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值