数组两端取数

本文介绍了完美世界笔试中的一道题目,涉及数组两端交替选取数据的问题。文章讨论了使用深度优先搜索(DFS)和动态规划(DP)两种方法解决此问题。深度优先搜索可能导致超时,因此转向动态规划策略,通过倒推计算不同区间上A和B的积分差,避免重复计算,从而优化解题效率。

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

这是完美世界的一道笔试题,题目详述忘记了,大概记得这么一个意思:
给定一个数组nums[0~n-1];A和B分变从数组的两端交替循环选择数据,累加到自身的积分中,并且A和B都采用最优策略选择数据,求最终A和B的积分。

首先考虑考虑用深度优先算法,定义一个函数int func(int st,int len),这个函数的功能是仅考虑在数组剩余区间为[st,en]时刻及之后(之前各自的积分都重置为0),A和B的积分之差;
那么:

int func(int st,int len)
{
    if(st>en) return 0;
    if(st==en) return nums[st];
    /*如果A选择最左端数据,那么B可以选择新的最左端或者最右端,B会选择二者中A本轮积分差和以后积分差之和最小的那种方式*/
    int t1= min(nums[st]-nums[st+1]+func(st+2,en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值