CF374C Inna and Dima 题解

题目链接:CF374C Inna and Dima

题意

Inna和Dima在商店买了一张 n * m 的桌子,桌子的每一个单元格上都有一个字符,字符集为(“D”,“I”,“M”,“A”)。

Inna实在是太爱Dima了,所以她想在桌子上找出一条最长的路线,使得这条路线中包含尽可能多的Dima的名字(有序,即必须是连续的DIMA)。

Inna的路线选取方式会遵循以下原则:

1.一开始,Inna会在桌子上找到所有的"D",把他们作为起点。

2.Inna会在当前格子的周围四个相邻的格子中选取一个格子,她会从"D"走到"I",从"I"走到"M",从"M"走到"A"。这样,她就认为自己走完了一次Dima的名字。

3.Inna每走完一个格子,就会在该格子四周相邻的四个格子中选一个走,即上下左右四个方向,(当然,她不能走出这张桌子)。Inna从不跳过一个字母。因此,从字母"D"开始,她总是走到字母"I",从字母"I"开始,她总是走到字母"M",从字母"M"开始,她总是走到字母"A",从字母"A"开始,她总是走到字母"D"。

因为桌子的不同,Inna能走的Dima的名字的次数也不同,有时她可以走有限次,有时她可以走无限次,有时她甚至不能走完一次Dima的名字。

现在,她想知道她能否至少走完一次Dima的名字。若可以,她最多能走多少次或者她能否走无限次?

纯记忆化搜索

从每个D都跑一下

对于无限的情况,

只要判断下一个可行格子是不是已经visited了

注意记忆化搜索使用dis数组更新答案

不是靠每次dfs的step

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(1e3+15)
int n,m,ans;
char a[N][N];
int dx[5]={1,-1,0,0};
int dy[5]={0,0,1,-1};
int vis[N][N],dis[N][N];
bool safe(int x,int y)
{return 1<=x&&x<=n&&1<=y&&y<=m;}
void dfs(int x,int y)
{if(dis[x][y])return;vis[x][y]=1;dis[x][y]=1;for(int k=0; k<4; k++){int tx=x+dx[k];int ty=y+dy[k];if(!safe(tx,ty))continue;if(!(a[x][y]=='D'&&a[tx][ty]=='I'||a[x][y]=='I'&&a[tx][ty]=='M'||a[x][y]=='M'&&a[tx][ty]=='A'||a[x][y]=='A'&&a[tx][ty]=='D'))continue;if(vis[tx][ty]){cout << "Poor Inna!";exit(0);}dfs(tx,ty);dis[x][y]=max(dis[x][y],dis[tx][ty]+1);}vis[x][y]=0;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> n >> m;for(int i=1; i<=n; i++)cin >> a[i]+1;for(int i=1; i<=n; i++)for(int j=1; j<=m; j++){if(a[i][j]=='D'&&!vis[i][j])dfs(i,j),ans=max(ans,dis[i][j]);}ans/=4;if(ans==0)cout << "Poor Dima!";else cout << ans;return 0;
}

转载请说明出处

CF374C Inna and Dima 题解相关推荐

  1. Codeforces2000分左右DP泛刷

    乱七八糟的DP题随便刷刷 文章目录 CF148E - Porcelain CF1131D - Gourmet choice CF629C - Famil Door and Brackets CF895 ...

  2. [codeforces366C]Dima and Salad

    time limit per test : 1 second memory limit per test : 256 megabytes Dima, Inna and Seryozha have ga ...

  3. Codeforces Round #220 (Div. 2)

    A. Inna and Pink Pony 题意:给出如下参数,          n, m, i, j, a, b (1 ≤ n, m ≤ 106; 1 ≤ i ≤ n; 1 ≤ j ≤ m; 1  ...

  4. Codeforces #208 div2前两题及思维风暴

    昨晚原本准备在宿舍打cf的,结果吵吵闹闹的,也没打成,头也晕晕的,当时看了只看了第一个题,越想越麻烦,最后竟然陷入了误区,半小时也没解,虽然注册了,一发也没交... A. Dima and Conti ...

  5. CF 400 div2

    从昨天周赛开始,要耍CF了~ 开始还害怕个人赛自己数论压根不会怎么办,发现CF全是乱搞的题orz 但是就算是乱搞的也不能1A  T^T 犯的错误基本上都是没有把情况归类导致要么是情况想少了,要么是细节 ...

  6. CF366D Dima and Trap Graph 题解

    题意 给定一张有 nnn 个节点,mmm 条边的无向图(可能有环或重边),对于每个节点 iii,有 lil_ili​ 和 rir_iri​,定义在经过该节点后,只能携带于 lil_ili​ 和 rir ...

  7. Codeforces 358 D. Dima and Hares

    dp[i][0]表示i号兔子先于i-1号兔子喂食,dp[i][1]反过来. 倒着DP D. Dima and Hares time limit per test 2 seconds memory li ...

  8. Codefroces 366 C Dima and Salad(dp)

    Dima and Salad 题意:一共有n种水果,每种水果都有一个ai, bi,现求一个最大的ai总和,使得ai之和/对应的bi之和的值等于K. 题解:将bi转换成偏移量,只要偏移到起点位置,就代表 ...

  9. --12月月赛题解--

    12月月赛题解 问题 A: 求区间最大值 题目描述 给你一个长度为n的序列{a_1,a_2-a_n},下标从1到n,Q个询问,每次询问给出一个L和R,你需要输出最大的a_i,(L<=i<= ...

  10. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

最新文章

  1. iOS10 UI教程基础窗口的内容与设置起始窗口
  2. DOM基本操作(二:对节点的操作)
  3. 【bfs】WZK旅游(jzoj 1996)
  4. IntelliJ IDEA for Mac中Maven菜单用法详解
  5. c语言 string.h部分常用函数的实现
  6. 用c#写的smtp邮件发送类
  7. 大数据时代的图表可视化利器——highcharts,D3和百度的echarts
  8. Excel如何随机抽取姓名
  9. 假设今天是2015年3月1号星期日,计算13个月零6天后是星期几?距离现在多少秒?
  10. 关于png图片在AndroidStudio上显示有白色边框的解决办法
  11. obj-c中Autorelease、属相定义Property、对象的操作
  12. 香的很,整理了20份可视化大屏模板
  13. 浅谈马尔可夫决策过程(一)
  14. matplotlib自定义设置plt.colorbar函数配置颜色条的刻度数实战:自定义设置颜色条刻度、并为刻度值进行命名和标签化
  15. python爬虫学习(8) —— 关于4399的一个小Demo
  16. 云南大学计算机值得调剂吗,这4所211报名无人问,调剂人爆满!今年是不是你的菜?...
  17. 一套适用于所有老板的营销方案,让他一个月就卖出3780箱红酒!
  18. Spring Web MVC (Spring MVC) 的相关例题及解析
  19. 篇章级的事件抽取——阅读笔记
  20. HTK搭建大词汇量连续语音识别系统(一)

热门文章

  1. ERROR [com.alibaba.druid.pool.DruidDataSource] - abandon connection
  2. win10系统如何删除不用的输入法
  3. protobuf中repeated类型变量与C++ vector类型变量的相互赋值方法
  4. 数据库连接串的问题。(如果是集群数据库的话)
  5. 教会如何使用WordPress提供在线讲道
  6. kali之beef的使用
  7. The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals
  8. Not authorized , ReasonPhrase:Unauthorized
  9. CSDN,一个可能即将被遗忘的角落
  10. jboss启动oracle表不存在,JBoss的部署及运行