题目 参考
题意给定一个长度为偶数的字符串s,Alice和Bob轮流操作该字符串,Alice先走。初始时Alice和Bob各自有一个空字符串。
对于每次操作,从字符串中s,选择第一个元素,或者最后一个元素,移除,并添加到自己的字符串的头部。
一直都s字符串为空串,则结束该过程
最终,Alice和Bob的字符串中,字典序最小的,即为胜者。 问,如果Alice和Bob都采取明智的策略,谁最终会是胜者。如果平局,则输出Draw
思路因为是添加到队头,所以影响胜利的关键,是最里边的元素。 定义dp[l][r]表示操作[l,r]的子区间的胜利者,-1表示Alice,0表示平局,1表示Bob。有两种选择。
- 选择l上的字符,那么此时对手可以操作区间[l+1,r],此时对手可以选择l+1或者r上的字符,对手会选择对他有利的局面。
- 选择r上的字符串,那么此时对手可以操作区间[l,r-1],此时对手可以选择l或者r-1上的字符,对手会选择对他有利的局面。
对于当前区间[l,r],假设我方选择l,对方选择了r。
- 如果dp[l-1][r-1]不为0,说明区间[l-1,r-1]已经抉择出胜利者了,l和r位置上字符谁大都不影响局面了。
- 如果dp[l-1][r-1]为0,说明区间[l,r]是平局状态,此时就要看l和r位置上字符的大小
其他场景,类似分析。详见代码
代码#include
using namespace std;
const int maxn = 2010;
//#define debug
int n;
char s[maxn];
int dp[maxn][maxn];
int cmp(char a, char b) {
if (a == b) {
return 0;
}
return a
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?