首页 > 其他分享 >CF613E Puzzle Lover 题解

CF613E Puzzle Lover 题解

时间:2024-07-27 22:06:18浏览次数:16  
标签:10 题解 Puzzle 路径 矩阵 Lover CF613E

Description

给定一个 \(2 \times n\) 的矩阵,每个位置上有一个小写字母。

有一个长度为 \(k\) 的小写字符串 \(w\),询问矩阵中有多少条有向路径满足以下条件:

  • 路径上的字母连起来恰好为 \(w\)。
  • 不多次经过同一个位置。
  • 只能向上下左右四个方向走。

\(n,k \le 2 \times 10^3\),答案对 \(10^9+7\) 取模。

Solution

注意到矩阵的宽只有 \(2\),所以最终的行走路线一定是这样:

即两边为一个 U 形,中间为一个不走回头路的路径和两边的 U 形拼接起来。

不妨先考虑起点在终点左边或者起点和终点在同一列并且起点先往左走的情况。

显然可以 dp,设 \(f_{i,j,s}\) 表示目前走到 \((i,j)\),且匹配到了 \(w\) 的第 \(s\) 位的方案数,这个方案是考虑了左边的 U + 不回头路径或者只有不回头路径的方案。

那么如果 \((i,j)\) 右边能找到一个长度为 \(k-s\) 的 U 就可以让 \(f_{i,j,s}\) 更新答案。

实现时要注意不要算重。

时间复杂度:\(O(nk)\)。

Code

标签:10,题解,Puzzle,路径,矩阵,Lover,CF613E
From: https://www.cnblogs.com/Scarab/p/18327599

相关文章

  • IOI2022 邮局 加强版 题解
    [IOI2000]邮局加强版题解考虑动态规划,设\(f_{i,j}\)为经过了\(i\)个村庄,正在建第\(j\)​个邮局的最优距离。以及\(w_{i,j}\)表示区间\([i,j]\)​内建一个邮局时的距离总和。\(a\)数组表示每个村庄的坐标编号。朴素版状态转移方程:\[f_{i,j}=\min(f_{i,j},f_{k,j......
  • 07-25 题解
    07-25题解原题出处(按顺序):CF1556ECF1234FP9746CF1316EP3651CF17CCF1842HA转化:括号序列如果\(a_i\>b_i\),则有\(a_i-b_i\)个左括号如果\(a_i\<b_i\),则有\(b_i-a_i\)个右括号(第一个+1的位置一定在第一个-1的位置的左侧,所以情况一用左括号......
  • 第二次测试部分题解 (c,d,g)
    c-一个欧拉函数模板题 1#include<iostream>2usingnamespacestd;34intmain()5{6intn;7cin>>n;8intr=n;9for(inti=2;i*i<=n;i++)10{11if(n%i==0)12{13r......
  • 第二次测试部分题解
    A——暴力枚举计数就好了,可以参考这段代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definemod100003#defineMAN1000100charstr[10];intans;voidok(){ ans=0; intlen=0; for(inti=0;str[i]!='\0';i++) len++; if(l......
  • ABC260F 题解
    题面根据题目描述,原图为二分图,设两侧点集为\(S,T\),大小为\(s,t(s\le3\times10^5,t\le3\times10^3)\)。注意到有四元环当且仅当\(T\)中存在一个点对\((a,b)\)同时和\(S\)中的某两个点连边。可以先考虑暴力,一种想法是:考虑枚举\(S\)中的点\(c\),设和\(c\)连边的点......
  • ABC263F 题解
    题面注意到把对局在图上表示出来是一颗满二叉树(叶节点为选手,其他点为对局),可以考虑树形dp。设\(x\)为\([l_x,r_x]\)之间选手的比赛,且该节点到叶子结点距离\(d_x\)。设\(f(x,p)\)表示胜者为\(p\)的最大钱数,有转移:\[\begin{aligned}f(x,p)&=f(lson(x),p)+g(rson(x))+a......
  • ABC262F 题解
    题面把“移动\(a_n\)至数列头”称为rotate,删除一项称为erase。因为要求字典序最小,所以可以逐位贪心。考虑一个数\(a_i\)怎么变成第一个数:使用\(n-i\)次rotate/erase,再rotate一次。删除或移动原来的\(a_{i+1}\sima_n\),再移动原来的\(a_i\)(逐步移动到数列尾,再ro......
  • ABC261F 题解
    题面注意到如果两个球\(i,j\)有\(i<j,x_i>x_j\),那么这两个球一定会交换。所以要交换\(x\)的逆序对数次。但是相同颜色交换没有代价,所以答案是\(x\)的逆序对数减去满足\(c_i=c_j,i<j,x_i>x_j\)的\((i,j)\)对的数量。可以对每个\(j\)都求一遍满足\(c_i=j\)的\(......
  • ABC264F 题解
    题面注意到操作只对当前行/列有效,所以只要记录当前所在行和列是否有被操作。设\(f(i,j,x,y)\)表示到了位置\((i,j)\),第\(i\)行是否被操作,第\(j\)列是否被操作的最小代价。转移:设\(col=c(i,j)\oplusx\oplusy\)。\[\begin{aligned}f(i+1,j,x2,y)&\xleftarrow......
  • ABC265F 题解
    题面\(O(nd^2)\)考虑\(f(i,j,k)\)表示dp到第\(i\)维,距离\(p,q\)曼哈顿距离\(j,k\)的方案数。考虑朴素转移:设\(dis=|p_{i+1}-q_{i+1}|\)。\[\begin{aligned}f(i+1,j+t,k+dis-t)&\getsf(i,j,k)&(0\leqt\leqdis)\quad&(1)\\f(i+1,j+d+t,k+t)&\ge......