UVALIVE 7505 Hungry Game of Ants DP

该博客讲述了UVALIVE 7505题目的解题思路,这是一个关于蚂蚁在数轴上进行生存竞争的问题。每只蚂蚁有重量,可以向左或向右移动,遇到重量小的蚂蚁会将其吃掉。问题求解的是在给定数量的蚂蚁中,第K只蚂蚁能存活下来的不同情况数。博主提出了一种动态规划的解决方案,通过分析蚂蚁的重量和移动方向,推导出状态转移方程,并利用后缀和优化,实现了线性时间复杂度的解法。
摘要由CSDN通过智能技术生成

EC-FInal的题。。要是场上出了就好了。。。

题意:有N只蚂蚁玩饥饿游戏,在一个x轴上,第i只蚂蚁在坐标i上,重量为i,现在蚂蚁可以选择向左走或向右走,当两只蚂蚁相遇时大蚂蚁吃掉小蚂蚁,重量增加小蚂蚁的重量,如果重量相同,左边的蚂蚁吃掉右边的蚂蚁,给出N,K,问第K只蚂蚁最后留下的情况数。

数据范围: N<=10^6  K>=1 K<=N

解题:对于第N只蚂蚁,如果他想获胜,那么最后一个向左走的蚂蚁的前缀和必须小于其右边蚂蚁的后缀和,因为向左走的蚂蚁最终肯定会吃完(可能不是他吃完)左边直到1位置的所有蚂蚁然后向右走,此时这只向右走的蚂蚁的重量为1-最后一只向左走的蚂蚁的重量的和x,而他右边的蚂蚁向右走,那么最终必会被第N只蚂蚁吃掉,并且最后第N只蚂蚁的重量和为最后一只向左走的蚂蚁右边的蚂蚁的重量和y,此时两只蚂蚁相遇,如果第N只蚂蚁要获胜,那么x<y,所以只要找到这个位置len,那么情况数为2^(len+1),因为len+1~(n-1)的方向都确定了,剩下的随便选方向。

下面考虑对于N,K,可以发现(N,K))可以推到(N-1,K)的情况,即第N-1只蚂蚁向左拐的情况,可以发现此时因为第K只蚂蚁为获胜者,所以他最后必定向右走,重量为1-N-1只蚂蚁的重量和x,而右边的蚂蚁的重量和为第N只蚂蚁的重量y,那么只要x>y,第K只蚂蚁就会获胜,令dp[n-1]表示(N-1,K)的答案,那么(N,K)+=dp[n-1]/2 *2;/2表示第N-1只蚂蚁本来在长度为N-1时可以双向走,但长度为N时规定方向向左&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值