这题刚开始理解错题意了 以为只能往右和下走

这题挺好的 看题解看了N久啊

二维的DP 第一维表示走到第几步 可以画一个正方形 以左上角斜着划线 第i步走的点只能是第i条线上的点 而dp的第二维 就表示的第i步可以到达的点的状态

另开一个a数组来表示 第i条线上每个字母的状态

dp所代表的值就为a与b的差值 以这个来进行选择 进行记忆化

确定下一步可以到达的字母的状态 是以当前可达的状态&下一步所要到达的字母的状态

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
using namespace std;
#define LL __int64
#define INF 1e9
int dp[][<<],a[][];
char s[][];
int n;
int dfs(int step,int sta)
{
int i,num=;
if(dp[step][sta]!=INF)
return dp[step][sta];
for(i = ; i < n ; i++)
{
if(sta&(<<i))
{
if(s[step-i][i]=='a') num++;
else if(s[step-i][i]=='b') num--;
break;
}
}
if(step==*n-)
return dp[step][sta] = num;
if(step%!=)
{
dp[step][sta] = -INF;
for(i = ; i < ; i++)
{
int next = a[step+][i]&(sta|(sta<<));
if(next==)
continue;
dp[step][sta] = max(dp[step][sta],dfs(step+,next)+num);
}
return dp[step][sta];
}
else
{
for(i = ; i < ; i++)
{
int next = a[step+][i]&(sta|(sta<<));
if(next==)
continue;
dp[step][sta] = min(dp[step][sta],dfs(step+,next)+num);
}
return dp[step][sta];
}
}
int main()
{
int i,j;
scanf("%d",&n);
for(i = ; i < n ; i++)
cin>>s[i];
for(i = ; i < *n- ; i++)
{
for(j = ; j < n ; j++)
{
if(i-j<||i-j>=n) continue;
a[i][s[i-j][j]-'a'] |= (<<j);
}
}
for(i = ; i < *n ; i++)
for(j = ; j < (<<n) ; j++)
dp[i][j] = INF;
int ans = dfs(,);
if(ans>)
puts("FIRST");
else if(ans<)
puts("SECOND");
else
puts("DRAW");
return ;
}

Codeforces Round #206 (Div. 1)B(记忆化)的更多相关文章

  1. 构造水题 Codeforces Round #206 (Div. 2) A. Vasya and Digital Root

    题目传送门 /* 构造水题:对于0的多个位数的NO,对于位数太大的在后面补0,在9×k的范围内的平均的原则 */ #include <cstdio> #include <algori ...

  2. Educational Codeforces Round 1 E. Chocolate Bar 记忆化搜索

    E. Chocolate Bar Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/598/prob ...

  3. Codeforces Round #206 (Div. 2) 部分题解

    传送门:http://codeforces.com/contest/355 A:水题,特判0 int k,d; int main(){ //FIN; while(cin>>k>> ...

  4. Codeforces Round #206 (Div. 2) A. Vasya and Digital Root

    #include <iostream> using namespace std; int main(){ int k,d; cin >> k >>d; ) { k ...

  5. Codeforces Round #206 (Div. 2)

    只会做三个题: A:简单题,不解释: #include<cstdio> using namespace std; int k,d; int main() { scanf("%d% ...

  6. Codeforces Round #450 (Div. 2)

    Codeforces Round #450 (Div. 2) http://codeforces.com/contest/900 A #include<bits/stdc++.h> usi ...

  7. Codeforces Round #261 (Div. 2)[ABCDE]

    Codeforces Round #261 (Div. 2)[ABCDE] ACM 题目地址:Codeforces Round #261 (Div. 2) A - Pashmak and Garden ...

  8. 刷题记录:Codeforces Round #719 (Div. 3)

    Codeforces Round #719 (Div. 3) 20210703.网址:https://codeforces.com/contest/1520. 没错,我是个做div3的蒟蒻-- A 大 ...

  9. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

随机推荐

  1. 【python】网络爬虫抓取图片

    利用python抓取网络图片的步骤: 1.根据给定的网址获取网页源代码 2.利用正则表达式把源代码中的图片地址过滤出来 3.根据过滤出来的图片地址下载网络图片 今天我们用http://www.umei ...

  2. 备份apt目录节省下载时间

    备份与清理      * 备份快速设置已下载的部分软件包,以便重装系统再次使用,免去重新下载的时间   tar cizvf backup.tar.gz /var/cache/apt/archives ...

  3. Atmel Studio 6.0新建项目

        使用Atmel Studio 6.0新建一个项目 连接Atmel 开发板与调试板,开发板使用的芯片是ATXMGEA128A1 注意: 以上对于开发板与调试板的连接,需要非常注意连接时线的方向, ...

  4. 【单调栈】Bzoj 1012: 最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 6255  Solved: 2676[Submi ...

  5. 解决Navicat Error: Missing required libmysql_d.dll

    在Navicat(H:\Program Files (x86)\Navicat for MySQL)目录下找到libmysql_d.dll,复制到C盘:system/wow64文件夹下. 重新打开na ...

  6. [设计模式] 23 访问者模式 visitor Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.访问 ...

  7. struts2+hibernate+spring+jquery返回json List列表

    1.引入包:struts2-json-plugin-2.1.8.1.jar json-lib-2.1.jar commons-collections-3.2.1.jar commons-beanuti ...

  8. PHP ServerPush

    原文:http://yorsal.com/archives/302 随着人们对Web即时应用需求的不断上升,Server Push(推送)技术在聊天.消息提醒尤其是社交网络等方面开始兴起,成为实时应用 ...

  9. UNIX command Questions Answers asked in Interview

    UNIX or Linux operating system has become default Server operating system and for whichever programm ...

  10. POJ 2499 Binary Tree(二叉树,找规律)

    题意:给一个这样的二叉树,每个节点用一对数(a,b)表示,根节点为(1,1).设父亲为(a,b),左儿子(a+b,b),右儿子(a,a+b). 给几组数据,(i,j),求从根节点到(i,j)节点需要向 ...