[USACO15OPEN]回文的路径Palindromic Paths
[USACO15OPEN]回文的路径Palindromic Paths
题目描述
Farmer John's farm is in the shape of an N \times NN×N grid of fields (1 \le N \le 5001≤N≤500), each labeled with a letter in the alphabet. For example:
ABCD
BXZX
CDXB
WCBA
Each day, Bessie the cow walks from the upper-left field to the lower-right field, each step taking her either one field to the right or one field downward. Bessie keeps track of the string that she generates during this process, built from the letters she walks across. She gets very disoriented, however, if this string is a palindrome (reading the same forward as backward), since she gets confused about which direction she had walked. Please help Bessie determine the number of distinct routes she can take that correspond to palindromes. Different ways of obtaining the same palindrome count multiple times. Please print your answer modulo 1,000,000,007.
农夫FJ的农场是一个N*N的正方形矩阵(2\le N\le 5002≤N≤500),每一块用一个字母作标记。比如说:
ABCD
BXZX
CDXB
WCBA
某一天,FJ从农场的左上角走到右下角,当然啦,每次他只能往右或者往下走一格。FJ把他走过的路径记录下来。现在,请你把他统计一下,所有路径中,回文串的数量(从前往后读和从后往前读一模一样的字符串称为回文串)。
输入输出格式
输入格式:
The first line of input contains NN, and the remaining NN lines contain the
NN rows of the grid of fields. Each row contains NN characters that are
in the range A..Z.
第一行包括一个整数N,表示农场的大小,接下来输入一个N*N的字母矩阵。
输出格式:
Please output the number of distinct palindromic routes Bessie can take,
modulo 1,000,000,007.
输出一个整数,表示回文串的数量。
输入输出样例
4
ABCD
BXZX
CDXB
WCBA
12
说明
Bessie can make the following palindromes
1 x "ABCDCBA"
1 x "ABCWCBA"
6 x "ABXZXBA"
4 x "ABXDXBA"
题解:
貌似以前做过一道类似的题目,也是从左上角和右下角分别开始走,只不过那道题四位动规可以做。(当然数据加强后还是要降维)
首先想到f[i][j][k][l]表示从左上角走到(i,j),从右下角走到(k,l),在路径长度相等的情况下,所经过路径相同的方案数,然后动规方程显而易见。
但是这样做显然会爆时间,考虑降维,实际上只要枚举走过的步数和两个点所在的行数,就可以推出他们的位置,因此f[i][j][k]表示第一个点在第i行,第2个点在第j行,都走了k步的方案数。这样时间复杂度为O(n^3),原题时限2s,高性能评测1s应该没问题。
然后考虑空间,先写出三维状态的转移方程:
f[i][j][k]=(f[i-1][j][k-1]+f[i][j][k-1]+f[i][j+1][k-1]+f[i-1][j+1][k-1])%mod;
很显然步数之和上一层状态有关系,所以可以用滚动数组优化:
f[i][j][now]=(f[i-1][j][pre]+f[i][j][pre]+f[i][j+1][pre]+f[i-1][j+1][pre])%mod;
注:滚动数组开在最后一维,会变快很多,至于为什么,大神说是电脑开内存的方式不一样,具体我也不是很清楚,反正以后把多变的那一维放在后面就可以了。
一下是AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define mod (1000000007)
using namespace std;
typedef long long lol;
lol f[][][],ans,n,now,pre;
char map[][];
lol gi()
{
lol ans=,f=;
char i=getchar();
while(i<''||i>''){if(i=='-')f=-;i=getchar();}
while(i>=''&&i<=''){ans=ans*+i-'';i=getchar();}
return ans*f;
}
int main()
{
lol i,j,k;
n=gi();
for(i=;i<=n;i++)
scanf("%s",map[i]+);
now=;pre=;
if(map[][]!=map[n][n]){printf("0\n");return ;}
else f[][n][pre]=;
for(k=;k<=n;k++)
{
for(i=;i<=n;i++)
{
if(i>k)break;
for(j=n;j>=i;j--)
{
if(n-j+>k)break;
if(map[i][k-i+]==map[j][n-k+n-j+])
f[i][j][now]=(f[i-][j][pre]+f[i][j][pre]+f[i][j+][pre]+f[i-][j+][pre])%mod;
else f[i][j][now]=;
}
}
swap(now,pre);
}
for(i=;i<=n;i++)
{
ans=(ans+f[i][i][pre])%mod;
}
printf("%lld",ans);
return ;
}
[USACO15OPEN]回文的路径Palindromic Paths的更多相关文章
- 题解 P3126 【[USACO15OPEN]回文的路径Palindromic Paths】
P3126 [USACO15OPEN]回文的路径Palindromic Paths 看到这题题解不多,蒟蒻便想更加通俗易懂地分享一点自己的心得,欢迎大佬批评指正^_^ 像这种棋盘形的两边同时做的dp还 ...
- [USACO15OPEN]回文的路径Palindromic Paths 2.0版
题目描述 农夫FJ的农场是一个N*N的正方形矩阵(2\le N\le 5002≤N≤500),每一块用一个字母作标记.比如说: ABCD BXZX CDXB WCBA 某一天,FJ从农场的左上角走到右 ...
- [译+改]最长回文子串(Longest Palindromic Substring) Part II
[译+改]最长回文子串(Longest Palindromic Substring) Part II 原文链接在http://leetcode.com/2011/11/longest-palindro ...
- [译]最长回文子串(Longest Palindromic Substring) Part I
[译]最长回文子串(Longest Palindromic Substring) Part I 英文原文链接在(http://leetcode.com/2011/11/longest-palindro ...
- 洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares
P1206 [USACO1.2]回文平方数 Palindromic Squares 271通过 501提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 暂时没有 ...
- 领扣-5 最长回文子串 Longest Palindromic Substring MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- USACO 回文的路径
传送门 这道题和传纸条在某些方面上非常的相似.不过这道题因为我们要求回文的路径,所以我们可以从中间一条大对角线出发去向两边同时进行DP. 这里就有了些小小的问题.在传纸条中,两个路径一定是同时处在同一 ...
- 洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares
P1206 [USACO1.2]回文平方数 Palindromic Squares 题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2< ...
- Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)
Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子 ...
随机推荐
- HDU4080Stammering Aliens(后缀数组+二分)
However, all efforts to decode their messages have failed so far because, as luck would have it, the ...
- ACM学习历程—POJ1088 滑雪(dp && 记忆化搜索)
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- 原生js实现Canvas实现拖拽式绘图,支持画笔、线条、箭头、三角形和圆形等等图形绘制功能,有实例Demo
前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 演示地址:查看演示DEMO 新版本支持IE5+(你没看错,就是某软的IE浏览器)以上任意浏览器的Canvas绘图:htt ...
- 闪回之 Flashback Query (dml表、过程、函数、包等)、Flashback version Query
Flashback Query 背景:Flashback 是 ORACLE 自 9i 就开始提供的一项特性,在 9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数 ...
- Jasper:目录/资源
ylbtech-Jasper:目录/资源 1. 官网返回顶部 1. https://www.jasper.com/ 2. 2.返回顶部 1. http://api.jasperwireless.com ...
- java注解总结(1)
1.什么是注解 注解,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据. 2.介绍 何为注解?--->元数据:描述数据自身的数据. 注解就是代码的元数据,他们包含了代码自身 ...
- 深入剖析ASP.NET Core2.1部署模型,你会大吃一惊
---------------------------- 以下内容针对 ASP.NET Core2.1版本,2.2推出windows IIS进程内寄宿 暂不展开讨论---------------- ...
- [51nod] 1432 独木桥 贪心
n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? Input 第一行包含 ...
- Android权限之三共享UID和签名
http://blog.csdn.net/a345017062/article/details/6236263 共享UID 安装在设备中的每一个Android包文件(.apk)都会被分配到一个属于自己 ...
- poj2528(线段树区间替换&离散化)
题目链接: http://poj.org/problem?id=2528 题意: 第一行输入一个 t 表 t 组输入, 对于每组输入: 第一行 n 表接下来有 n 行形如 l, r 的输入, 表在区 ...