zoukankan      html  css  js  c++  java
  • USACO 2015 US OPEN Gold T2: Palindromic Paths

    题目大意

    农夫FJ的农场是一个N*N的正方形矩阵(1N500),每一块用一个字母作标记。比如说:

              ABCD

              BXZX

              CDXB

              WCBA

    某一天,FJ从农场的左上角走到右下角,当然啦,每次他只能往右或者往下走一格。FJ把他走过的路径记录下来。现在,请你把他统计一下,所有路径中,回文串的数量(从前往后读和从后往前读一模一样的字符串称为回文串)。

    题目分析

    因为每次只能横纵走一格,所以无论怎么走,必然会经过从左下到右上的对角线上的某个元素。而题目让我们求的是回文串,所以可以考虑Meet In The Middle。

    从左上和右下开始走,设DP[i][j][k]表示 走了i步 ,左上的点纵坐标为j,右下的点纵坐标为k。

    不难得出转移方程为  当 a[j][i+2-j] == a[k][n*2-i-k] (初始坐标为1,1 ,所以要+2)时 f[i][j][k] = f[i-1][j][k] + f[i-1][j-1][k] +f[i-1][j][k+1] + f[i-1][j-1][k+1],否则 f[i][j][k] = 0。

    因为n=500 而 500^3=1,2500,0000 爆空间,所以我们把第一维 i 压掉, 因为每次转移只会用到 j , j-1 , k , k+1,逆序枚举j、正序枚举k即可避免覆盖还未转移的状态。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long ll;
     5 const ll Mod=1e9+7;
     6 const int MAXN=505;
     7 
     8 int n;
     9 char a[MAXN][MAXN];
    10 ll f[MAXN][MAXN],ans;
    11 int main(){
    12     scanf("%d",&n);
    13     for(int i=1;i<=n;++i)
    14         for(int j=1;j<=n;++j)
    15             cin>>a[i][j];
    16     if(a[1][1]!=a[n][n]){
    17         printf("0
    ");
    18         return 0;
    19     }
    20     f[1][n]=1;
    21     for(int i=1;i<=n-1;++i)
    22         for(int j=i+1;j>=1;--j)
    23             for(int k=n-i;k<=n;++k){
    24                 if(a[j][i+2-j]==a[k][n*2-i-k])
    25                     f[j][k]=(f[j][k]+f[j-1][k]+f[j][k+1]+f[j-1][k+1])%Mod;
    26                 else
    27                     f[j][k]=0;
    28             }
    29     for(int i=1;i<=n;++i)
    30         ans=(ans+f[i][i])%Mod;
    31     printf("%lld
    ",ans);
    32     return 0;
    33 }
  • 相关阅读:
    [Aaronyang] 写给自己的WPF4.5 笔记[2依赖属性]
    [Aaronyang] 写给自己的WPF4.5 笔记[1布局]
    [AaronYang]C#人爱学不学[7]
    [AaronYang]C#人爱学不学[6]
    [AaronYang]C#人爱学不学[5]
    [AaronYang]C#人爱学不学[4]
    [AaronYang]C#人爱学不学[3]
    [AaronYang]C#人爱学不学[2]
    [AaronYang]C#人爱学不学[1]
    [aaronyang原创] Mssql 一张表3列的sql面试题,看你sql学的怎么样
  • 原文地址:https://www.cnblogs.com/LI-dox/p/11214249.html
Copyright © 2011-2022 走看看