没跑过,记一下
#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;
}