故事背景:

在遥远的 2018 2018 2018年 7 7 7月19" role="presentation" style="position: relative;">191919日,一个适合被忘记的日子,无聊又颓废 xyy x y y xyy在机房看卡牌对线小鱼人(小曰曰)。 “小鱼人普攻了一下兵,从这动作我知道这局对线要赢了”,王♂之dark♂气深深地震撼了 xyy x y y xyy,他不禁沉浸在了deep♂dark♂fantasy中。然而 xyy x y y xyy的twisted fate将他引向了绝望的深渊 ⋯⋯ ⋯ ⋯ \cdots\cdots其实就是被517抽到打了一道题

进入正题:

有两堆牌,每堆牌有n张牌,alice和bob轮流从某堆牌的最上面或者最下面取牌,牌上面写的分数会被加到他们对应的总分里,alice和bob都是绝顶聪明的,假如alice先取牌,最终他的得分是多少。

思路:

看起来有点像区间dp(alice和bob太可怕了),燃鹅用记忆化搜索会方便很多。主要是dp的初始化实在是太麻烦了,而搜索的边界很好判也很好写。思路跟dp其实是一样的, f[i][j][k][l] f [ i ] [ j ] [ k ] [ l ] f[i][j][k][l]表示第一个串取了i~j,第二个串取了k~l的alice最大价值。因为原来游戏是从外往里取,alice first,算法是从里往外取,所以alice last。在alice的round,他取四个pre状态中最大的,而bob为了使自己最大,就要让alice的价值minimum。边界实则一句话就好了,不像dp,打的心累啊。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int N = 25;
int n, a[N], b[N], ans;
int f[N][N][N][N];int DFS(int la, int ra, int lb, int rb)
{if (f[la][ra][lb][rb] != -1) return f[la][ra][lb][rb];int tmp;if (la > ra && lb > rb)return 0;if ((ra-la+rb-lb)%2 == 0){tmp = 0;if (la <= ra){tmp = max(tmp, DFS(la+1, ra, lb, rb)+a[la]);tmp = max(tmp, DFS(la, ra-1, lb, rb)+a[ra]);}if (lb <= rb){tmp = max(tmp, DFS(la, ra, lb+1, rb)+b[lb]);tmp = max(tmp, DFS(la, ra, lb, rb-1)+b[rb]);}}else{tmp = 0x7f7f7f7f;if (la <= ra){tmp = min(tmp, DFS(la+1, ra, lb, rb));tmp = min(tmp, DFS(la, ra-1, lb, rb));}if (lb <= rb){tmp = min(tmp, DFS(la, ra, lb+1, rb));tmp = min(tmp, DFS(la, ra, lb, rb-1));}}return f[la][ra][lb][rb] = tmp;
}int main()
{cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 1; i <= n; i++) cin >> b[i];memset(f, -1, sizeof(f));cout << DFS(1, n, 1, n);return 0;
}

dp百行错误代码就不拿出来丢人现眼了

alice 和 bob 一起 van♂卡牌游戏相关推荐

  1. 【概率DP】$P2059$ 卡牌游戏

    [概率DP]P2059 卡牌游戏 链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张 ...

  2. 天池 在线编程 卡牌游戏(01背包)

    文章目录 1. 题目 2. 解题 1. 题目 你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌. 每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害. 你总共有 totalM ...

  3. 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏

    2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...

  4. CCF201612-5 卡牌游戏(募集解题代码)

    试题编号: 201612-5 试题名称: 卡牌游戏 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 小Q和小M是游戏数值策划师,他们最近在测试自己新设计的卡牌对战游戏.游戏总共 ...

  5. 算法题 - 卡牌游戏问题 - Python

    问题描述: 卡牌游戏问题   小a和小b玩一个游戏,有 n张卡牌,每张上面有两个正整数 x, y.取一张牌时,个人积分增加 x,团队积分增加 y.求小a,小b各取若干张牌,使得他们的 个人积分相等,且 ...

  6. java卡牌游戏详解

    代码如下: package zxc;//文件夹名称 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.even ...

  7. 基于QT开发的开源局域网联机UNO卡牌游戏报告(附github仓库地址)

    源代码: https://github.com/yunwei37/UNO-game-oop 目录 1. 需求分析 1.1. UNO卡牌游戏的基本功能 1.2. UNO卡牌游戏的规则 2. 总体设计 3 ...

  8. 卡牌游戏战斗系统的设计和实现二

    卡牌游戏战斗系统的设计和实现二 http://www.lxway.com/4418844614.htm 在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计.这篇文章中,我将从程序的角度, ...

  9. 盛大搅局手游市场:引入日系卡牌游戏_0

    腾讯科技讯(娄池)7月18日消息,盛大游戏宣布热门手游<百万亚瑟王>于今日开启国服公测,这款由日本知名游戏公司Square Enix(SE)研发,盛大游戏韩国子公司Actoz Soft负责 ...

最新文章

  1. Python Module_os_操作系统
  2. linux jstat 命令监控gc情况
  3. C与C++在const用法上的区别
  4. 【做题记录】 [HEOI2013]SAO
  5. Uploadify 3.2 参数属性、事件、方法函数详解
  6. 中低频量化交易策略研发06_推进的择时策略
  7. python怎么读取excel-python怎么读取excel表格
  8. Spring Cloud Config客户端使用
  9. JavaScript数据结构与算法基础学习笔记03----链表与双向链表
  10. 商业分析的50个网站和分析方法
  11. 2022年必备的加密行业术语大全,你了解有多少?
  12. 零点漂移、零点补偿问题
  13. Pointnet语义分割任务S3DIS数据集上的注意点
  14. ps后期处理实用技巧2
  15. 软件工程专业的论文答辩_2015软件工程硕士论文答辩流程
  16. 俄罗斯联邦储蓄银行将采取措施绕开本国加密货币监管
  17. 15首中秋诗词,有2首你肯定熟悉
  18. 中国电信骨干网南北互通异常 现已修复
  19. Android 点击图片放大至全屏 再次点击关闭过度动画 Shared Element效果(共享元素效果)
  20. 【医学图像智能计算】DL在医学影像中的应用综述—图像重建

热门文章

  1. 数据管理平台与数据治理平台的区别和联系
  2. HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER开机启动程序的区别
  3. 【精讲】微信小程序 基础内容(组件)入门
  4. vb6使用WinRAR压缩和解压文件
  5. matlab模拟嫦娥奔月,2017年6月英语六级翻译模拟练习题:嫦娥奔月
  6. nvm 管理 node 版本
  7. 数据可视化分析平台开源方案集锦
  8. 这几个插件,让你的 vscode 更牛逼!
  9. c/c++ 内存使用指南 和实践指导
  10. 计算机教室架构,物联网智慧教室架构