CodeForces - 570E(dp------------- Codeforces Round #316 (Div. 2)E
题目:给出一个字母矩阵,问从左上角走到右下角的走法有多少种走法能走出回文子串,只能向下或向右走。
思路:正解是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相关推荐
- 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 ...
- 570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分
题目:一棵树上每个节点有个字符值,询问每个节点的深度为h的子节点的字符是否能组成一个回文串. 思路:首先是奇妙的dfs序和时间戳,通过记录每个节点的dfs进出时间,可以发现某个节点的子节点的进出时间均 ...
- Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...
- Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...
- 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 ...
- Codeforces Round #743 (Div. 2) E. Paint 区间dp + 暴力
传送门 文章目录 题意: 思路: 题意: 给你一个有nnn个像素的图像,每个像素都有一个颜色aia_iai,保证每种颜色的图像不会超过202020个.你现在每次可以选择一个颜色,并选择一段连续的像素 ...
- Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对
传送门 文章目录 题意: 思路: 题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确定当前这个 ...
- Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心
传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...
- 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 ...
最新文章
- Linux Socket基础介绍
- linux c 环境变量函数 getenv putenv 简介
- python-day2~3
- 温州大学《机器学习》课程课件(九、支持向量机)
- 12864 OLED屏显示日历
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第34篇]描述攻击离散对数问题的baby-step/Giant-step方法
- 开源大数据:Apache DolphinScheduler
- java基本数据类型泛型_Java中的泛型
- 什 么 是 勒 索 病 毒 ?
- Excel表格自动化办公(持续更新)
- 【mac/windows】Microsoft Office LTSC 2021
- 结合案例轻松理解PID到底是个啥?
- 在ASP.NET中轻松实现加密
- 写专利还是比较辛苦的
- r语言归一化_R语言︱数据规范化、归一化
- python怎么更新setuptools_Python打包之setuptools
- Astyle使用方法
- 【转】Linux开启FTP服务和修改FTP密码
- 一步一脚印,创造辉煌
- ONNX(Open Neural Network Exchange ):开放式神经网络交换
热门文章
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
- 未解决-hive之drop 表分区失败
- 紫书搜索 习题7-8 UVA - 12107 Digit Puzzle IDA*迭代加深搜索
- bzoj2561: 最小生成树
- “staticMetaObject”: 不是“****”的成员
- 绝对定位元素设置水平居中
- linux命令:mkdir 命令详解
- 无关技术,关于香港对我的影响
- 【一天一个shell命令】好管家-磁盘-du
- 大型企业都用什么web服务器呢?nginx