找到n个身高不同的路人排成一排,A、B两人从左端开始轮流选取一人或两人出列,最对身高求和。编程求谁赢
确实是DP问题。不过你说的解法应该是有问题的,那样做不能保证全局最优。
我觉得应该这么做:声明一维dp数组,其中dp代表区间范围内(也就是从第i个人到队列末尾)先选取者可以获得的最大身高和与后选取者可以获得的最大身高和的gap,也就是假设从i开始,A先选能得到最大身高和为S,B后选在剩下来的人中能得到最大身高和为T,则dp=S-T,那么状态转移方程为dp = max(heights-dp, heights+heights-dp)即代表区间内先选取者能得到的最优解gap等于先选取者只选第一个人减去后选取者得到的最大gap与先选取者选两个人减去后选取者得到的最大gap中的较大值。
【找到n个身高不同的路人排成一排,A、B两人从左端开始轮流选取一人或两人出列,最对身高求和。编程求谁赢】 简单的C++实现代码bool PredictWinner(vector\u0026lt;int\u0026gt;\u0026amp; heights){ int length = heights.size(); vector\u0026lt;int\u0026gt; dp(length, 0); for (int l=1, i=0; l\u0026lt;=length; ++l) { i = length - l; if (l==1) dp = heights; else if (l==2) dp = heights + heights; else dp = max(heights-dp, heights+heights-dp); } return dp\u0026lt;0? false:true;}
■网友
可以用暴力法,把一只队伍针对各种可能性,虚拟成n种,虚拟后只能一人选一个,而不是一至2个。2113426 ok22366 ok21448ok2278 22726 ok22348ok21466 ok21178 ok211366 211726 21448ok31348ok31366ok313426 31466 ok31448 ok3448 34426 ok把以上做成一个二叉树,对奇数层节点来说,就是a的选择。然后从最底下开始计算,对奇数层节点打标记。根节点按0算。比如21448,8是最底层,又是奇数,计算结果ok,就对8打上标记。再往上看第三层4这个节点,计算另外一条路径,21466,如果结果也ok,把4也做上标记。计算完一次,树就矮了2层,递归计算即可。
推荐阅读
- 趣头条|【为什么300万人都选帝豪GL】因为有你,每个周末都与众不同
- 概念车|历久弥新 与众不同-B级家轿 英诗派
- 陆毅|三部大戏相继开播“观众缘”各不同
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 长寿|同样都是吸烟,为啥日本人能够长寿?医生说出几点不同,值得思考
- 蔡依林|林峯近照曝光,发福状态不敌大1岁刘涛,身高也被疑作假
- 喃喃话车|丰田亚洲龙怎么样,级别高性价比偏低,两种人看法不同
- 为啥会有多种通信协议
- QQ在pc端同时登录两个为啥不会发生ip地址冲突
