zoukankan      html  css  js  c++  java
  • POJ 3616 Milking Time (字符串DP)

    题意:找元素关于对角线左或右对称的最大矩阵

    思路:左右对角线只需要遍历一条就可以了。只要当前点往上遍历和往后遍历一样就可以。

     1 #include<iostream>
     2 #include<string>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<cstdio>
     6 #include<set>
     7 #include<map>
     8 #include<vector>
     9 #include<cstring>
    10 #include<stack>
    11 #include<cmath>
    12 #include<queue>
    13 #define clc(a,b) memset(a,b,sizeof(a))
    14 #include <bits/stdc++.h>
    15 using namespace std;
    16 #define LL long long
    17 const int maxn = 20005;
    18 const int inf=0x3f3f3f3f;
    19 const double pi=acos(-1);
    20 char str[1010][1010];
    21 int ans;
    22 int dp[1010][1010];
    23 
    24 void fun(int x,int y)
    25 {
    26     int num=dp[x-1][y-1];
    27     int i;
    28     for(i=1; i<=num; i++)
    29     {
    30         if(str[x-i][y]!=str[x][y-i])
    31             break;
    32     }
    33     if(i>num)
    34         dp[x][y]=dp[x-1][y-1]+1;//转移方程
    35     else
    36         dp[x][y]=i;
    37     if(ans<dp[x][y])
    38         ans=dp[x][y];
    39 }
    40 
    41 int main()
    42 {
    43     int n;
    44     while(scanf("%d",&n),n)
    45     {
    46         ans=0;
    47         memset(dp,0,sizeof(dp));
    48         for(int i=n; i>=1; i--)
    49             scanf("%s",&str[i][1]);
    50         for(int i=1; i<=n; i++)
    51         {
    52             for(int j=1; j<=n; j++)
    53             {
    54                 fun(i,j);
    55             }
    56         }
    57         printf("%d
    ",ans);
    58     }
    59     return 0;
    60 }
    View Code
  • 相关阅读:
    linux 环境变量恢复默认值
    怎么查看Eclipse的版本信息
    掌握HDFS的Java API接口访问
    【代理】代理概念
    【DbUtils】轻量级的ORM学习
    【mysql】相关记录
    JWT(JSON Web Tokens)
    将jar包安装到本地仓库
    Spring集成rabbitmq
    spring-rabbit包的引入需要注意的事项
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5296826.html
Copyright © 2011-2022 走看看