• HDU1505 City Game 动态规划


    http://acm.hdu.edu.cn/showproblem.php?pid=1505

    自己写的屌丝代码:

    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #define MAXN 1050
    using namespace std;
    
    int N, M, u[MAXN][MAXN], l[MAXN][MAXN], G[MAXN][MAXN];
    
    inline int max(int x, int y)
    {
        return x > y ? x : y;
    }
    
    inline int min(int x, int y)
    {
        return x < y ? x : y;
    }
    
    int DP()
    {
        int Max = 0;
        for (int i = 1; i <= N; ++i) {
            for (int j = 1; j <= M; ++j) {
                if (G[i][j]) {
                    int L = 1, H = 1, bx, by;
                    by = u[i][j] = u[i-1][j] + 1;
                    bx = l[i][j] = l[i][j-1] + 1;
                    Max = max(Max, max(bx*H, by*L)); 
                    for (int f = i-1; f > 0; --f) { 
                        
                        if (G[f][j]) {
                            ++H;
                            bx = min(bx, l[f][j]);
                        }
                        else {
                            break;
                        }
                        Max = max(Max, max(bx*H, by*L)); 
                    } 
                    for (int g = j-1; g > 0; --g) { 
                        
                        if (G[i][g]) {
                            ++L;
                            by = min(by, u[i][g]);
                        }
                        else {
                            break;
                        }
                        Max = max(Max, max(bx*H, by*L));
                    }
                }
                else {
                    u[i][j] = 0;
                    l[i][j] = 0;
                }
            }
        }
        return Max;
    }
    
    int main()
    {
        int T;
        char logo[4];
        scanf("%d", &T);
        while (T--) {
            scanf("%d %d", &N, &M);
            for (int i = 1; i <= N; ++i) {
                for (int j = 1; j <= M; ++j) {
                   scanf("%s", logo);
                   G[i][j] = (logo[0]== 'F');
                }
            }
            printf("%d\n", 3 * DP());
        }   
        return 0;
    }

    用1506的写法

    #include<stdio.h>
    #include<string.h>
    #define M 1005
    int a[M][M], l[M], r[M];
    
    int main() {
        int t, i, j, res, ans, n, m;
        char str[10];
        scanf("%d", &t);
        while (t-- && scanf("%d %d", &n, &m)) {
            memset(a[0], 0, sizeof (a[0]));
            for (i = 1; i <= n; i++)
                for (j = 1; j <= m; j++) {
                    scanf("%s", str);
                    if (str[0] == 'F')a[i][j] = a[i - 1][j] + 1;
                    else a[i][j] = 0;
                }
            ans = -1;
            for (i = 1; i <= n; i++) {
                for (j = 1; j <= m; j++)l[j] = r[j] = j;
                a[i][0] = a[i][m + 1] = -1;
                for (j = 2; j <= m; j++) {
                    while (a[i][j] <= a[i][l[j] - 1])
                        l[j] = l[l[j] - 1];
                }
                for (j = m - 1; j >= 1; j--) {
                    while (a[i][j] <= a[i][r[j] + 1])
                        r[j] = r[r[j] + 1];
                }
                for (j = 1; j <= m; j++) {
                    res = a[i][j]*(r[j] - l[j] + 1);
                    if (res > ans)ans = res;
                }
            }
            printf("%d\n", ans * 3);
        }
        return 0;
    }
  • 相关阅读:
    回文自动机(PAM) 学习笔记
    UOJ#103. 【APIO2014】Palindromes PAM模板题
    UOJ#348. 【WC2018】州区划分
    STL 抄袭笔记
    ZJOI2019Day1 游记
    UOJ#370. 【UR #17】滑稽树上滑稽果 动态规划
    UOJ#24. 【IOI2014】Rail 交互题
    UOJ#373. 【ZJOI2018】线图 搜索,树哈希,动态规划
    UOJ#75. 【UR #6】智商锁 随机化算法 矩阵树定理
    AtCoder Grand Contest 031 (AGC031) D
  • 原文地址:https://www.cnblogs.com/Lyush/p/2455531.html
Copyright © 2020-2023  润新知