[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=4098

[算法]

显然 , 回文路径中第i个字母的位置(x , y)必然满足 : x + y - 1 = i

用f[i][j][k]表示现在在第i步 , 左上的横坐标为j , 右下的横坐标为k , 有多少种方案使得两边路径上的字母序列相同 , DP即可

时间复杂度 : O(N ^ 3)

滚动数组 , 将空间复杂度优化为O(N ^ 2)

[代码]

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 510
  4. const int P = 1e9 + ;
  5.  
  6. int n;
  7. int f[][MAXN][MAXN];
  8. char mp[MAXN][MAXN];
  9.  
  10. inline void update(int &x , int y)
  11. {
  12. x += y;
  13. x %= P;
  14. }
  15. inline bool valid(int x , int y)
  16. {
  17. return x >= && x <= n && y >= && y <= n;
  18. }
  19.  
  20. int main()
  21. {
  22.  
  23. scanf("%d",&n);
  24. for (int i = ; i <= n; i++) scanf("%s",mp[i] + );
  25. if (mp[][] == mp[n][n])
  26. {
  27. f[][][n] = ;
  28. } else
  29. {
  30. printf("0\n");
  31. return ;
  32. }
  33. for (int i = ; i <= n; i++)
  34. {
  35. int now = i & , nxt = now ^ ;
  36. memset(f[nxt] , , sizeof(f[nxt]));
  37. for (int x = ; x <= n; x++)
  38. {
  39. for (int y = ; y <= n; y++)
  40. {
  41. int t1 = i + - x , t2 = * n - y + - i;
  42. if (!valid(x , t1) || !valid(y , t2)) continue;
  43. if (!f[now][x][y]) continue;
  44. if (valid(x , t1 + ))
  45. {
  46. if (valid(y , t2 - ) && mp[x][t1 + ] == mp[y][t2 - ])
  47. update(f[nxt][x][y] , f[now][x][y]);
  48. if (valid(y - , t2) && mp[x][t1 + ] == mp[y - ][t2])
  49. update(f[nxt][x][y - ] , f[now][x][y]);
  50. }
  51. if (valid(x + , t1))
  52. {
  53. if (valid(y , t2 - ) && mp[x + ][t1] == mp[y][t2 - ])
  54. update(f[nxt][x + ][y] , f[now][x][y]);
  55. if (valid(y - , t2) && mp[x + ][t1] == mp[y - ][t2])
  56. update(f[nxt][x + ][y - ] , f[now][x][y]);
  57. }
  58. }
  59. }
  60. }
  61. int ans = ;
  62. for (int i = ; i <= n; i++) update(ans , f[n & ][i][i]);
  63. printf("%d\n" , ans);
  64.  
  65. return ;
  66.  
  67. }

[Usaco2015 OPEN] Palindromic Paths的更多相关文章

  1. [bzoj4098] [Usaco2015 Open]Palindromic Paths

    DP.. f[i][j][k]表示左上结束节点是第i条副对角线上的第j个点,右下结束节点是第n*2-i条副对角线上的第k个点,构成回文的方案数. i那维滚动一下.时间复杂度O(n^3)空间复杂度O(n ...

  2. [USACO15OPEN]回文的路径Palindromic Paths

    [USACO15OPEN]回文的路径Palindromic Paths 题目描述 Farmer John's farm is in the shape of an N \times NN×N grid ...

  3. TOJ 5020: Palindromic Paths

    5020: Palindromic Paths  Time Limit(Common/Java):10000MS/30000MS     Memory Limit:65536KByteTotal Su ...

  4. 题解 P3126 【[USACO15OPEN]回文的路径Palindromic Paths】

    P3126 [USACO15OPEN]回文的路径Palindromic Paths 看到这题题解不多,蒟蒻便想更加通俗易懂地分享一点自己的心得,欢迎大佬批评指正^_^ 像这种棋盘形的两边同时做的dp还 ...

  5. Educational Codeforces Round 89 (Rated for Div. 2) C Palindromic Paths

    题目链接:Palindromic Paths 题意: 给你一个n行m列的矩阵,这个矩阵被0或者1所填充,你需要从点(1,1)走到点(n,m).这个时候会有很多路径,每一条路径对应一个01串,你可以改变 ...

  6. [USACO15OPEN]回文的路径Palindromic Paths 2.0版

    题目描述 农夫FJ的农场是一个N*N的正方形矩阵(2\le N\le 5002≤N≤500),每一块用一个字母作标记.比如说: ABCD BXZX CDXB WCBA 某一天,FJ从农场的左上角走到右 ...

  7. Palindromic Paths(DP)

    描述 Given an N×N grid of fields (1≤N≤500), each labeled with a letter in the alphabet. For example: A ...

  8. Codeforces 1205C Palindromic Paths (交互题、DP)

    题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...

  9. CF1205C Palindromic Paths

    题目链接 问题分析 首先可以想到,坐标和为奇数的位置可以被唯一确定.同样的,如果假定\((1,2)\)是\(0\),那么坐标和为偶数的位置也可以被唯一确定.这样总共使用了\(n^2-3\)次询问. 那 ...

随机推荐

  1. Jquery跨域请求

    在JavaScript中,有一个很重要的安全性限制,被称为“Same- Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaSc ...

  2. UITableView点击背景

    系统自定义的点击背景有时间觉得效果不好想换个 - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelect ...

  3. poj3468区间延迟更新模板题

    #include<stdio.h> #include<string.h> #define N 100000 struct st{  int x,y;  __int64 yanc ...

  4. PHP字符串的替换(preg_replace)

    /* 正则表达式  preg_replace() */ $str = array( "如果没有一些http://www.abc.com特殊的<b>替换</b>需5求( ...

  5. Linux怎么读? Linux读音考古一日游

    Linux怎么读?  Linux读音考古一日游/*凡是准备踏入Linux大门的叉子们(N年不关注了,不知道这个称呼是否还有),都必须经历疑问 那就是linux到底怎么读? 也许有些人很容易 什么里纽克 ...

  6. ES6__字符串、数组、对象的扩展

    /** * 字符串的扩展 */ // 模板字符串 tab上面的反向符号 // 添加${} // let flag = true; // // let html = `<ul> // < ...

  7. tomcat启动提示java.lang.UnsatisfiedLinkError: D:\soft\devTool\apache-tomcat-7.0.57\bin\tcnative-1.dll: C

    https://blog.csdn.net/a274360781/article/details/52411984

  8. python学习之 - configparser模块

    configparser模块功能:用于生成和修改常见配置文件.基本常用方法如下: read(filename):直接读取配置文件write(filename):将修改后的配置文件写入文件中.defau ...

  9. P2384 最短路 洛谷

    https://www.luogu.org/problem/show?pid=2384 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会 ...

  10. Java描述符(修饰符)的类型

    以下内容引用自http://wiki.jikexueyuan.com/project/java/modifier-types.html: 描述符(修饰符)是添加到那些定义中来改变他们的意思的关键词.J ...