zoukankan      html  css  js  c++  java
  • HDU 2859 Phalanx (dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859

    给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线)

    dp[i][j]表示i行j列元素的最大对称度

    每到一个元素的时候,往上边和右边扩展看字符最优的对称长度 与dp[i - 1][j - 1]进行比较取最优即可。

     1 //#pragma comment(linker, "/STACK:102400000, 102400000")
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <cmath>
     9 #include <ctime>
    10 #include <list>
    11 #include <set>
    12 #include <map>
    13 using namespace std;
    14 typedef long long LL;
    15 typedef pair <int, int> P;
    16 const int N = 1e3 + 5;
    17 int dp[N][N];
    18 char str[N][N];
    19 
    20 int main()
    21 {
    22     int n;
    23     while(~scanf("%d", &n) && n) {
    24         for(int i = 1; i <= n; ++i) {
    25             scanf("%s", str[i] + 1);
    26         }
    27         memset(dp, 0, sizeof(dp));
    28         int res = 1;
    29         for(int i = 1; i <= n; ++i) {
    30             for(int j = n; j >= 1; --j) {
    31                 int len = 1;
    32                 while(str[i - len][j] == str[i][j + len] && i - len > 0 && j + len <= n) {
    33                     ++len;
    34                 }
    35                 dp[i][j] = max(1, min(dp[i - 1][j + 1], len - 1) + 1);
    36                 res = max(res, dp[i][j]);
    37             }
    38         }
    39         printf("%d
    ", res);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    快速排序
    Java LinkedList
    Java ArrayList
    Java ReentrantLock
    Java Timer
    Java 管道PipedInputStream PipedOutStream PipedReader PipedWriter
    6. Samba服务和防火墙配置笔记
    5. 网络配置与FTP服务笔记
    3.vi 和软件安装
    2 . Linux常见命令
  • 原文地址:https://www.cnblogs.com/Recoder/p/5781948.html
Copyright © 2011-2022 走看看