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
  • 相关阅读:
    for ,foreach ,map 循环的区别
    PHP生成验证码图片
    Google自动打印
    MYSQL定时任务
    PHP 多维数组将下标从0开始
    MYSQL常用函数
    PHP 手机短信发送验证码
    php 限制标题长度,将一个中文转换成一个字符
    MYSQL 模糊查询
    MYSQL AND 和 OR
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5296826.html
Copyright © 2011-2022 走看看