「模拟赛20191019」A 简单DP
题目描述
给一个\(n\times m\)的网格,每个格子上有一个小写字母。
对于所有从左上角\((1,1)\)到右下角\((n,m)\)只向下或向右走的路径构成的集合,判断是否存在两条走法不同的路径,使得把它们经过的格子上的字母按顺序记下来得到的序列完全相同。
输入
第一行一个整数\(T\)表示数据组数,对于每组数据:
第一行两个整数\(n,m\);
接下来\(n\)行,每行一个长度为\(m\)的字符串表示网格的每一行。
输出
对于每组数据,输出一行\(Yes\)或\(No\)表示是否存在这样的两条路径。
样例
样例输入
2
2 2
ab
bc
2 2
ab
cd
样例输出
Yes
No
数据范围
对于\(100\%\)的数据,\(1\leq n,m \leq 1000\),\(1\leq T\leq 10\)。
水题,考虑\(DP\),假设目前考虑到第\(i\)行,第\(j\)列,要是存在这两条路径,那么它们要么都从上方走来,要么都从左边走来,或者一条从上方走来,一条从左边走来。
讨论一下,第一种情况,只要\(i-1\)行,\(j\)列可以满足就行了;第二种情况,只要\(i\)行,\(j-1\)列满足就行了;第三种情况,首先要满足\(A_{i-1,j}=A_{i,j-1}\),然后发现只要能走到\((i-1,j-1)\)这个点,就一定存在这样的路径(先沿着同一条路走到\((i-1,j-1)\),然后分别经过\((i-1,j)\)和\((i,j-1)\)到达\((i,j)\))。
于是定义\(f_{i,j}\)表示前\(i\)行,\(j\)列是否满足,则\(f_{i,j}=f_{i-1,j}|f_{i,j-1}|(A_{i-1,j}=A_{i,j-1})\)。这道题就做完了……
\(Code:\)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 1005
char S[N][N];
int n, m, t, f[N][N];
int main()
{
scanf("%d", &t);
for (; t--; )
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%s", S[i] + 1);
memset(f, 0, sizeof(f));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
f[i][j] |= f[i - 1][j] | f[i][j - 1];
if (i > 1 && j > 1)
f[i][j] |= (S[i][j - 1] == S[i - 1][j]);
}
if (f[n][m])
puts("Yes");
else
puts("No");
}
}
「模拟赛20191019」A 简单DP的更多相关文章
- 「模拟赛20191019」B 容斥原理+DP计数
题目描述 将\(n\times n\)的网格黑白染色,使得不存在任意一行.任意一列.任意一条大对角线的所有格子同色,求方案数对\(998244353\)取模的结果. 输入 一行一个整数\(n\). 输 ...
- 「模拟赛20190327」 第二题 DP+决策单调性优化
题目描述 小火车虽然很穷,但是他还是得送礼物给妹子,所以他前往了二次元寻找不需要钱的礼物. 小火车准备玩玩二次元的游戏,游戏当然是在一个二维网格中展开的,网格大小是\(n\times m\)的,某些格 ...
- 「模拟赛20191019」C 推式子+贪心+树状数组
题目描述 给定一棵\(n\)个点的有根树,根节点编号为\(1\),点有点权. 定义\(d(v)\)表示\(v\)到\(1\)的路径上的边数. 定义\(f(v,u)\)在\(v<u\)且\(v\) ...
- 「模拟赛20181025」御风剑术 博弈论+DP简单优化
题目描述 Yasuo 和Riven对一排\(n\)个假人开始练习.斩杀第\(i\)个假人会得到\(c_i\)个精粹.双方轮流出招,他们在练习中互相学习,所以他们的剑术越来越强.基于对方上一次斩杀的假人 ...
- 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...
- 「模拟赛 2018-11-02」T3 老大 解题报告
老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图),由于新建的办公室太大以 ...
- 「模拟赛20180406」膜树 prufer编码+概率
题目描述 给定一个完全图,保证\(w_{u,v}=w_{v,u}\)且\(w_{u,u}=0\),等概率选取一个随机生成树,对于每一对\((u,v)\),求\(dis(u,v)\)的期望值对\(998 ...
- 「模拟赛20180307」三元组 exclaim 枚举+树状数组
题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...
- 6.28 NOI模拟赛 好题 状压dp 随机化
算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...
随机推荐
- UVa10828 Back to Kernighan-Ritchie——概率转移&&高斯消元法
题意 给出一个程序控制流图,从每个结点出发到每个后继接结点的概率均相等.当执行完一个没有后继的结点后,整个程序终止.程序总是从编号为1的结点开始.你的任务是对于若干个查询结点,求出每个结点的期望执行次 ...
- ctx控制超时的使用
cancel package main import ( "context" "fmt" "time" ) func gen(ctx con ...
- H5利用formData来上传文件(包括图片,doc,pdf等各种格式)方法小结!
H5页面中我们常需要进行文件上传,那么怎么来实现这个功能呢??? 我主要谈如下两种方法. (一).传统的form表单方法 <form action="/Home/SaveFile1&q ...
- Python面向对象 -- slots, @property、多重继承MixIn、定制类(str, iter, getitem, getattr, call, callable函数,可调用对象)、元类(type, metaclass)
面向对象设计中最基础的3个概念:数据封装.继承和多态 动态给class增加功能 正常情况下,当定义了一个class,然后创建了一个class的实例后,可以在程序运行的过程中给该实例绑定任何属性和方法, ...
- sdcf day4 qaq模拟赛总结
目录 链接 总结 链接 点这里,O(∩_∩)O~ 总结 我还是太菜了,第二题提交了\(8\)遍,真心无语了 总结来看 一是思维能力弱,第二个思维题想了很长时间,想不出来 二是代码能力弱,尽管代码短,但 ...
- linux命令之------Less命令
Less命令 1)作用:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件. 2)ctrl+F 向前移动一屏: 3) ...
- java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.() is not accessible from jav
java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.<init>() is not accessible fr ...
- Noip2019暑期训练2
题目名称 骑士遍历 和谐俱乐部 农场派对 对称二叉树 存盘文件名 knight Beautiful party tree 输入文件名 knight.in Beautiful.in party.in ...
- element ui里面table分页,页数从0开始的怎么做?
需求: 后台请求的接口是从0页开始的,但是pagination是从1开始的,就是在点击pagination的第1页是后台转0 1首先在data里面定义为1,其他地方也是定义1 return { for ...
- 工作发狂:Mybatis 中$和#千万不要乱用!
阅读本文大概需要 2.2 分钟. 作者:程序猿的内心独白 开头 这是一次代码优化过程中发现的问题,在功能优化后发现部分数据查不到出来了,问题就在于一条sql上的#和$. 下图为两条sql: 从图上可以 ...