阿里編程

沒跑過,記一下

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


/*請完成下面這個函數,實現題目要求的功能*/
/******************************開始寫代碼******************************/

int jump(const vector<vector<int>> &matrix, int n, int m) {
    vector<vector<int> > dp(n, vector<int>(m, INT_MAX));
    for (int i = 0; i <= n; ++i) {
        dp[i][m - 1] = 0;
    }

    for (int i = m - 2; i >= 0; --i) {
        for (int j = 0; j < n; ++j) {
            int step = matrix[i][j];
            for (int k = j - 1; k >= 0 && k >= j - step; --k) {
                if (dp[i][k] == INT_MAX) continue;
                dp[i][j] = min(dp[i][j], 1 + dp[i][k]);
            }

            for (int k = j + 1; k < n && k <= j + step; ++k) {
                if (dp[i][k] == INT_MAX) continue;
                dp[i][j] = min(dp[i][j], 1 + dp[i][k]);
            }

            for (int k = m + 1; k < m && k <= m + step; ++k) {
                if (dp[i][k] == INT_MAX) continue;
                dp[i][j] = min(dp[i][j], 1 + dp[k][j]);
            }
        }
    }

    int ret = INT_MAX;
    for (int i = 0; i != n; ++i)
        ret = min(ret, dp[i][0]);
    return ret;
}

/******************************結束寫代碼******************************/

int main() {
    int n, m;
    cin >> n >> m;
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    vector<vector<int>> matrix;
    for (int i = 0; i < n; i++) {
        vector<int> row;
        for (int j = 0; j < m; j++) {
            int e;
            cin >> e;
            row.push_back(e);
        }

        matrix.push_back(row);
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    cout << jump(matrix, n, m) << endl;

    return 0;
}

水滴那個, 可以通過

int main() {
    int n = 6, m = 7;
    vector<vector<int> > matrix(n, vector<int>(m, 1));
    matrix[0][2] = 0;
    matrix[0][5] = 0;
    matrix[0][6] = 0;
    matrix[1][1] = 0;
    matrix[1][4] = 0;
    matrix[1][5] = 0;
    matrix[3][0] = 0;
    matrix[3][2] = 0;
    matrix[3][4] = 0;
    matrix[4][2] = 0;
    matrix[4][6] = 0;
    matrix[5][2] = 0;
    matrix[5][5] = 0;

    vector<vector<int> > dp(n, vector<int>(m, 0));
    for (int i = 0; i != n; ++i) {
        int beg = 0;
        int end = beg;
        while (beg < m) {
            while (beg < m && matrix[i][beg] == 0) {
                ++beg;
            }
            int end = beg;
            while (end < m && matrix[i][end] == 1) {
                ++end;
            }
            for (int j = beg; j != end; ++j) {
                dp[i][j] += end - beg;
            }
            beg = end;
        }
    }

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }

    for (int i = 0; i != m; ++i) {
        int beg = 0;
        int end = beg;
        while (beg < n) {
            while (beg < n && matrix[beg][i] == 0) {
                ++beg;
            }
            int end = beg;
            while (end < n && matrix[end][i] == 1) {
                ++end;
            }
            for (int j = beg; j != end; ++j) {
                dp[j][i] += end - beg - 1;
            }
            beg = end;
        }
    }

    vector<int> maxId(n, 0);

    for (int i = 0; i < n; ++i) {
        for (int j = 1; j < m; ++j) {
            if (dp[i][j] > dp[i][maxId[i]]) {
                maxId[i] = j;
            }
        }
    }

    int maxRow = 0;
    for (int i = 1; i < n; ++i) {
        if (dp[i][maxId[i]] > dp[maxRow][maxId[maxRow]]) {
            maxRow = i;
        }
    }

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }
    // maxRow
    // maxCol = maxId[maxRow];
    cout << maxRow << " " << maxId[maxRow] << endl;
    return 0;
}
發佈了227 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章