题目:给出一个字母矩阵,问从左上角走到右下角的走法有多少种走法能走出回文子串,只能向下或向右走。

思路:正解是O(n^3)的dp,也跑了2.9s,可见这题时限是比较紧的。自然的一个想法是两头同时向中间走,这样可以保证走出的是回文串,问题在于如何dp。一共需要走O(n+m)步,而每一步从左上走过来的和右下走过来的进行匹配,以行数作为下标表示二者即可(因为距离确定的情况下只需要知道一个坐标)。所以dp[i][j][k]就表示在第i步,第j行和第k行配对组成的回文串的数目,滚动数组优化空间把步数那一维去掉。转移的时候需要考虑四种走法(对应两头的两种走法相乘)。然后就是递推到中间之后,根据x和y轴的长度之和还需要稍微讨论一下。

#include <bits/stdc++.h>
#define pb push_back
#define se second
#define fs first
#define sq(x) (x)*(x)
#define eps 0.000000001
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
const ll mod=1e9+7;
const int maxv=505;
ll dp[2][maxv][maxv];
int n,m;
char r[maxv];
char mp[maxv][maxv];
const int d1[2]={1,0};
const int d2[2]={0,1};
const int p1[2]={-1,0};
const int p2[2]={0,-1};
bool out(int x,int y){return x<0||x>=n||y<0||y>=m;
}
int main(){
//    freopen("/home/files/CppFiles/in","r",stdin);cin>>n>>m;for(int i=0;i<n;i++){scanf("%s",r);for(int j=0;j<m;j++){mp[i][j]=r[j];}}if(mp[0][0]!=mp[n-1][m-1]){cout<<0<<endl;return 0;}bool f=1;dp[0][0][n-1]=1;bool bbb=1;for(int d=0;d<(n+m-2)/2;d++){f^=1;for(int i=0;i<n;i++){for(int j=0;j<n;j++){dp[f^1][i][j]=0;}}for(int i=0;i<n;i++){///upfor(int j=0;j<n;j++){///downint x1=i,y1=d-x1;int x2=j,y2=n+m-2-d-x2;if(out(x1,y1)||out(x2,y2))  continue;for(int p=0;p<2;p++){for(int q=0;q<2;q++){int dx1=x1+d1[p],dy1=y1+d2[p];int dx2=x2+p1[q],dy2=y2+p2[q];if(out(dx1,dy1)||out(dx2,dy2)) continue;if(mp[dx1][dy1]==mp[dx2][dy2]){dp[f^1][dx1][dx2]=(dp[f^1][dx1][dx2]+dp[f][x1][x2])%mod;}}}}}ll ans=0;for(int i=0;i<n;i++){if(i+1<n&&(n+m)%2==1)ans=(ans+dp[f^1][i][i+1])%mod;ans=(ans+dp[f^1][i][i])%mod;}cout<<ans<<endl;return 0;}
}

View Code

转载于:https://www.cnblogs.com/Cw-trip/p/4730449.html

CodeForces - 570E(dp------------- Codeforces Round #316 (Div. 2)E相关推荐

  1. Codeforces Round #316 (Div. 2) D. Tree Requests dfs序

    题目链接: 题目 D. Tree Requests time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 Rom ...

  2. 570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分

    题目:一棵树上每个节点有个字符值,询问每个节点的深度为h的子节点的字符是否能组成一个回文串. 思路:首先是奇妙的dfs序和时间戳,通过记录每个节点的dfs进出时间,可以发现某个节点的子节点的进出时间均 ...

  3. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  4. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

  5. Codeforces Round #507 (Div. 1) D. You Are Given a Tree 根号分治 + dp

    传送门 题意: 有一颗nnn个节点的树,其中一个简单路径集合被称为kkk合法当且仅当: 树的每个节点至多属于一条路径,且每条路径恰好包含kkk个点. 对于k∈[1,n]k\in [1,n]k∈[1,n ...

  6. Codeforces Round #743 (Div. 2) E. Paint 区间dp + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个有nnn个像素的图像,每个像素都有一个颜色aia_iai​,保证每种颜色的图像不会超过202020个.你现在每次可以选择一个颜色,并选择一段连续的像素 ...

  7. Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确定当前这个 ...

  8. Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...

  9. Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位

    传送门 文章目录 题意: 思路: 题意: 定义f(x)f(x)f(x)表示xxx的十进制下数位和,现在给你aaa,让你选一个区间[l,r][l,r][l,r],满足∑i=lrf(i)moda=0\su ...

最新文章

  1. Linux Socket基础介绍
  2. linux c 环境变量函数 getenv putenv 简介
  3. python-day2~3
  4. 温州大学《机器学习》课程课件(九、支持向量机)
  5. 12864 OLED屏显示日历
  6. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第34篇]描述攻击离散对数问题的baby-step/Giant-step方法
  7. 开源大数据:Apache DolphinScheduler
  8. java基本数据类型泛型_Java中的泛型
  9. 什 么 是 勒 索 病 毒 ?
  10. Excel表格自动化办公(持续更新)
  11. 【mac/windows】Microsoft Office LTSC 2021
  12. 结合案例轻松理解PID到底是个啥?
  13. 在ASP.NET中轻松实现加密
  14. 写专利还是比较辛苦的
  15. r语言归一化_R语言︱数据规范化、归一化
  16. python怎么更新setuptools_Python打包之setuptools
  17. Astyle使用方法
  18. 【转】Linux开启FTP服务和修改FTP密码
  19. 一步一脚印,创造辉煌
  20. ONNX(Open Neural Network Exchange ):开放式神经网络交换

热门文章

  1. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
  2. 未解决-hive之drop 表分区失败
  3. 紫书搜索 习题7-8 UVA - 12107 Digit Puzzle IDA*迭代加深搜索
  4. bzoj2561: 最小生成树
  5. “staticMetaObject”: 不是“****”的成员
  6. 绝对定位元素设置水平居中
  7. linux命令:mkdir 命令详解
  8. 无关技术,关于香港对我的影响
  9. 【一天一个shell命令】好管家-磁盘-du
  10. 大型企业都用什么web服务器呢?nginx