D. Game with Strings
http://codeforces.com/contest/355/problem/D
这道题问了一下学妹,难道说哥已经老了!!!
首先题意理解上有些问题 比如说
a b c
b d e
f g h
第一个人写下 a ,第二个人写下 b,然后又该第一个人写了,这时候的 b 既可以是上边的 b
也可以是下边的 b 由将要写的人决定
dp[n][1<<20] 中dp[x][y] 表示的意思是到第x步时,选y这个状态为结尾(所对应的字符都相等)
且前面的字符串都一样时,接下来怎么选出的最优解
代码:
#include<iostream>
#include<stack>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<cmath> using namespace std; typedef long long ll;
typedef pair<int,int> pp;
const double eps=1e-6;
const int INF=0x3f3f3f3f;
const int N=41;
int dp[N][1<<20];
char c[N][N];
int a[N][N];
int n;
int dfs(int x,int y)
{
if(dp[x][y]!=INF)
return dp[x][y];
int w=(y|(y<<1));
int s[26]={0};
for(int h=0,x1=x,y1=1;h<n;++h,x1--,y1++)
if((y&(1<<h))&&x1>=1&&y1<=n)
{dp[x][y]=a[x1][y1];break;}
if(x==2*n-1)
return dp[x][y];
for(int h=0,x1=x+1,y1=1;h<n;++h,x1--,y1++)
if((w&(1<<h))&&x1>=1&&y1<=n)
{
int t=c[x1][y1]-'a';
s[t]=(s[t]|(1<<h));
}
int k0=-INF,k1=INF;
for(int i=0;i<26;++i)
if(s[i]>0)
{
k0=max(k0,dfs(x+1,s[i]));
k1=min(k1,dfs(x+1,s[i]));
}
if((x&1))
dp[x][y]+=k1;
else
dp[x][y]+=k0;
return dp[x][y];
}
int main()
{
//freopen("data.in","r",stdin); while(cin>>n)
{
int m=(1<<n);
for(int i=0;i<N;++i)
for(int j=0;j<m;++j)
dp[i][j]=INF;
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
cin>>c[i][j];
if(c[i][j]=='a') a[i][j]=1;
if(c[i][j]=='b') a[i][j]=-1;
}
int k=dfs(1,1);
//cout<<k<<endl;
if(k>0)
cout<<"FIRST"<<endl;
if(k<0)
cout<<"SECOND"<<endl;
if(k==0)
cout<<"DRAW"<<endl;
}
//fclose(stdin);
return 0;
}
D. Game with Strings的更多相关文章
- Hacker Rank: Two Strings - thinking in C# 15+ ways
March 18, 2016 Problem statement: https://www.hackerrank.com/challenges/two-strings/submissions/code ...
- StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing the strings?
StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing t ...
- Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- [LeetCode] Add Strings 字符串相加
Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...
- [LeetCode] Encode and Decode Strings 加码解码字符串
Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...
- [LeetCode] Group Shifted Strings 群组偏移字符串
Given a string, we can "shift" each of its letter to its successive letter, for example: & ...
- [LeetCode] Isomorphic Strings 同构字符串
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- [LeetCode] Multiply Strings 字符串相乘
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- 使用strings查看二进制文件中的字符串
使用strings查看二进制文件中的字符串 今天介绍的这个小工具叫做strings,它实现功能很简单,就是找出文件内容中的可打印字符串.所谓可打印字符串的涵义是,它的组成部分都是可打印字符,并且以nu ...
- LeetCode 205 Isomorphic Strings
Problem: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if ...
随机推荐
- Angular.js 的初步认识
MVC模式 模型(model)-视图(view)-控制器(controller) Angular.js采用了MVC设计模式的开源js框架 1.如何在angular.js建立自己的模块(model),控 ...
- CodeUI Test:UIMap录制文件分析一
UIMap文件是Coded UI Test的核心文件,它分为三个文件. 1.UIMap.uitest 这是xml文件,里面描述了所有需要操作的目标控件以及进行操作的动作等. 2.UIMap.Desig ...
- C#位运算讲解与示例
首先每一个权限数都是2的N次方数 如:k1=2 ; //添加 k2=4 ; //删除 k3=8; //修改 ... 如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了. 如: p ...
- [转] charles使用教程指南
charles使用教程指南 0x01 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势 ...
- JAVA 1.2(原生数据类型 Primitive Data Type)
1. Java的数据类型分为2类 >> 原生数据类型(primitive data type) >> 引用数据类型(reference data type) 3. 常量和变量 ...
- X.509,RSA,PKCS 普及
X.509 X.509是一种非常通用的证书格式.所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用. 在一份证书中,必须证明公钥 ...
- Linux提权基础
英文原文: Basic Linux Privilege Escalation 在开始之前,我想指出 - 我不是专家. 据我所知,在这个巨大的领域没有一个“魔法”的答案. 这只是我的发现,写出来,共享而 ...
- Baltic2008联合内阁
Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如 ...
- 如何透过HTC Vive拍摄Mixed Reality (混合现实)影片
https://www.vive.com/cn/forum/1706?extra=page%3D1 也许你是一位开发者,想为自己的HTC Vive游戏制作酷炫的宣传片:或者你是游戏主播,想为观众带来高 ...
- Redis在JAVA中的运用(工具类)
最近项目需要用redis在中间做缓存所以写了一个工具类作为练习用 redis版本:redis_version:3.0.504 用到阿里的解析JSON的库:fastjson import org.apa ...