Pagini recente » Cod sursa (job #881808) | Cod sursa (job #1358794) | Cod sursa (job #1479617) | Cod sursa (job #340642) | Cod sursa (job #2581841)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<vector<int>> flipMatrix (ifstream &f, int *n, int *m) {
vector<vector<int>> flipM;
f >> *n >> *m;
for (int i = 0; i < *n; ++i) {
vector<int> auxV;
for (int j = 0; j < *m; ++j) {
int aux;
f >> aux;
auxV.push_back(aux);
}
flipM.push_back(auxV);
}
return flipM;
}
int sumLine(vector<vector<int>> matrix, int line, int collumn, int *n, int *m) {
if (line) {
int sum = 0;
for (int i = 0; i < *m; ++i) {
sum += matrix.at(line).at(i);
}
return sum;
}
if (collumn) {
int sum = 0;
for (int i = 0; i < *n; ++i) {
sum += matrix.at(i).at(collumn);
}
return sum;
}
return 0;
}
int sumMatrix(vector<vector<int>> matrix, int *n, int *m) {
int sum = 0;
for (int i = 0; i < *n; ++i) {
for (int j = 0; j< *m; ++j) {
sum += matrix.at(i).at(j);
}
}
return sum;
}
int maxMatrix(vector<vector<int>> matrix, int *n, int *m) {
int max = sumMatrix(matrix, n, m);
int dp[*n + 1][*m + 1];
for(int i = 0; i < *n + 1; ++i) {
for (int j = 0; j < *m + 1; ++j) {
dp[i][j] = max;
}
}
for(int i = 1; i < *n + 1; ++i) {
int sum1 = sumLine(matrix, i - 1, 0, n, m);
for (int j = 1; j < *m + 1; ++j) {
int sum2 = sumLine(matrix, 0, j - 1, n , m);
dp[i][j] = std :: max(std :: max(dp[i - 1][j] - 2 * sum1, dp[i][j - 1] - 2 * sum2), dp[i - 1][j - 1] - 2 * sum1 - 2 * sum2);
}
}
int maxi = 0;
for(int i = 0; i < *n + 1; ++i) {
for (int j = 0; j < *m + 1; ++j) {
if (dp[i][j] > maxi) {
maxi = dp[i][j];
}
}
}
return maxi;
}
int main() {
ifstream f("flip.in");
ofstream g("flip.out");
int *n = (int*) malloc(sizeof(int) * 1);
int *m = (int*) malloc(sizeof(int) * 1);
vector<vector<int>> flipM = flipMatrix(f, n, m);
g << maxMatrix(flipM, n, m);
f.close();
g.close();
return 0;
}