*[topcoder]TheMatrix

http://community.topcoder.com/stat?c=problem_statement&pm=13035

矩阵棋盘的题,比较典型。可以定两条column夹住,然后上下扫,上下扫过程中有一点DP的东西,这样负责度是o(n^3)

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

class TheMatrix {
public:
    int MaxArea(vector <string> board) {
        int N = board.size();
        int M = board[0].size();
        int maxArea = 1;
        // fix i, j column
        for (int i = 0; i < M; i++) {
            vector<char> row(N);
            for (int j = i; j < M; j++) {
                for (int k = 0; k < N; k++) {
                    if (j == i) {
                        row[k] = board[k][j];
                    } else {
                        if (board[k][j] == board[k][j - 1])
                            row[k] = 'X';
                    }
                }
                int maxLen = 0;
                int len = 0;
                for (int k = 0; k < N; k++) {
                    if (row[k] == 'X') {
                        len = 0;
                    } else if (k == 0) {
                        len = 1;
                    } else if (k > 0 && row[k] != row[k - 1]) {
                        len++;
                    } else {
                        len = 1;
                    }
                    maxLen = max(len, maxLen);
                }
                int area = maxLen * (j - i + 1);
                maxArea = max(area, maxArea);
            }
        }
        return maxArea;
    }
};

  

posted @ 2014-08-09 12:59  阿牧遥  阅读(202)  评论(0)    收藏  举报