纸片选择

题目描述

题目分析

解决方案

题目描述

厦门大学最近很流行一种游戏:将2n张纸片依次进行排序,每张纸片上都写着一个价值a[i]。双方进行轮流操作,每次操作可以从首部或尾部拿走一张纸片并获得纸片上的价值,纸片不再放回,纸片取完后获得价值多的一方获胜。现在你是先手,你很明白你的对手足够聪明,请问你在最坏情况下最多可以获得多少的价值。

出题者:秦豪远同学

输入

第一行包含一个整数n(n<=6)

接下来一行,一共2n个数字,代表每张纸片上的价值a[i](0<=a[i]<=100)

输出

输出一个整数,代表你最多可以获得的价值。

输入样例:

3
4 3 8 9 1 5

输出样例:

17

题目分析:

思路:该问题需要考虑全局的变化情况,这里选择递归算法choose(int num[],int len),返回值即是每个num[]所求最大值。

(1)函数每次传递的参数是剩下的牌组成的数组及其牌数,每一轮递归两人各完成一次选择。

(2)递归出口是剩下两张牌,返回较大的数值即可

(2)对于给定的2n张牌,自己优先选择有两种情况:choose->L和choose->R,表示自己选择完之后能从剩下的牌中获得的最大值。然后对手选择再分两种情况,一共就有四种情况,分别是①choose->L->L、②choose->L->R、③choose->R->L、④choose->R->R,表示一轮选择之后自己能从剩下的牌中获得的最大值。按照题目要求,需要在自己选牌的时候考虑最好情况,对方选牌考虑最坏的情况。例如自己的选择choose->L,那么共有①和②两种情况,由于是对手选择后产生的,所以考虑最坏情况,即choose->L=min(choose->L->L,choose->L->R)。若是choose->R,有③和④,同理考虑最坏情况,即choose->R=min(choose->R->L,choose->R->R)。这样就剩下两种情况,由于这两种情况是自己选择产生的,于是考虑最好情况,choose=max(choose->L+num[L],choose->R+num[R]),即是以下程序中的:

max(

num[0] + min( choose(num+2,len-2) , choose(num+1,len-2) ),

num[len-1] + min( choose(num,len-2) , choose(num+1,len-2) )

)

解决方案:

#include <iostream>
using namespace std;
int choose(int num[],int len){if(len==2)return max(num[0],num[1]);return max(num[0]+min(choose(num+2,len-2),choose(num+1,len-2)),num[len-1]+min(choose(num,len-2),choose(num+1,len-2)));
}
int main(){int n;cin>>n;int num[2*n];for(int i=0;i<2*n;i++)cin>>num[i];cout<<choose(num,2*n);return 0;
}

XMUOJ·纸片选择相关推荐

  1. Oracle调优总结--1(经典实践 重要)

    Problem Description: 1.每个表的结构及主键索引情况 2.每个表的count(*)记录是多少 3.对于创建索引的列,索引的类型是什么?count(distinct indexcol ...

  2. 纸片人「活」了。Meta AI新作:只需几分钟,手绘小人有了灵魂

    想让画中的「纸片人」有生命,Meta AI来搞定!昨日,Meta AI宣布了一种独创性方法,只需几分钟,就能动画化儿童手绘的角色,效果拔群. 快看,「纸片人」居然自己跳出来了! 小猫学会了hiphop ...

  3. Unity 粒子制作简单飞舞纸片特效

    首先在3dmax里做一个很简单的纸片,并直接贴上带有高光和颜色的材质. 纸片在空中飞舞时会"自转",所以在max里面先做一个简单的旋转动画,并在Renderer Setup中将其序 ...

  4. xmuoj《C++与Python语法入门练习(By郭炜老师)》python参考代码

    目录 前言 xmuoj对应链接 Pycharm安装 代码 001 输出第二个整数 002 字符菱形 003 打印ASCII码 004 打印字符 005 整型数据类型存储空间大小 006 浮点型数据类型 ...

  5. 当网红本人成为网红毒瘤:Vtuber的纸片人模式能够破解困局吗?

    随着直播产业走出膨胀期,2018年也成了直播网红逐一崩塌的一年. 在中国有陈一发儿.莉哥等人因触碰政治红线而被封禁.在美国,YouTube上"一哥"pewdiepie也不太平,频繁 ...

  6. 自己造个真正意义上的AI纸片人离我们还有多远?

    自己造个真正意义上的AI纸片人离我们还有多远? 我一直想自己"造"个可以像个人一样跟我聊天,当我想操作电脑或手机或玩游戏时,只要跟ta说,ta都能为我操作,还帮我玩游戏挂机--的纸 ...

  7. 龙珠头/小怪兽/纸片少女都是怎么弄的?

    先别说你早就知道了,肯定还是很多粉丝不知道的! 比如小怪兽这个阿虚也是最近才知道的 ▍1 龙珠头 之前阿虚学穿搭的时候- 经常能看到这种图: 又帅又可以不露脸? 那可不就三个字:好.顶.赞 而且不少穿 ...

  8. switch好玩吗_Switch今年上半年游戏汇总 原来有这么多选择

    期待已久的任天堂Switch马上就将在本周五正式出货了.虽说我们更多去谈论着关于这台主机的种种,但当真正拿到机器时,其实对咱们玩家最重要的还是能否找到自己认为好玩的东西.所以,小编特意将今年上半年的S ...

  9. 利率选择第三部分 理财方案量身定做 12.帮孩子理财从打理压岁钱开始

    在改章节中,我们主要介绍利率选择的内容,自我感觉有个不错的提议和大家分享下 都说如今过年是大人愁,孩子乐,因为春节之际大人不免要有一笔不菲的花费,但对于孩子来说,除了好吃好穿之外,按中华民族的传统习俗 ...

最新文章

  1. 100道 Dubbo面试题及答案(2021最新)
  2. hive to mysql_Hive And MySQL安装及设置
  3. HDU5762(暴力)
  4. oracle去掉blob的黑边,oracle Blob处理
  5. 元宇宙深度研究报告:元宇宙是互联网的终极形态?
  6. vb 用代码添加控件
  7. C#并发编程之初识并行编程
  8. Git理论、原理、操作
  9. java 资深工程师必备技能
  10. js 确定主窗体是否存在
  11. scan——Theano中循环的实现
  12. gitlab git 安装
  13. sdut 2878 圆圈
  14. Bootstrap Timepicker
  15. 主力移仓与跨期套利(转)
  16. Verilog 代码编写 DDS信号发生器(幅频相可调正弦波、方波、三角波、锯齿波)纯VIVADO编写仿真
  17. 新锐任务宝推广渠道推荐
  18. 【数据分析】搜索和非结构化数据分析值得关注的5大趋势
  19. 计算机从bios到操作系统,高手进!!计算机开机后在进入操作系统前BIOS在进行什么检测工作?...
  20. FM FFM:深入理解FM与FFM

热门文章

  1. Linux基础篇——Linux进程、服务管理
  2. 基于时域表示的序列数据分类方法(一)——基于距离度量的序列数据分类方法
  3. 写给面临危机的计算机类学生们的肺腑之言 转
  4. US News2022世界大学排行榜!
  5. MetroMusic音乐播放器开发心得
  6. 7-6 王牌特工3 (15 分)
  7. 【已解决】error: ‘CV_GRAY2BGR’ was not declared in this scope
  8. idea maven 仓库 jar 包下载不来下解决方案
  9. 外文文献如何免费查找下载
  10. iOS - 递归遍历文件夹下的所有文件