Pagini recente » Cod sursa (job #809297) | Cod sursa (job #456457) | Cod sursa (job #1624687) | Cod sursa (job #254229) | Cod sursa (job #1882755)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
const int kMaxDim = 1005;
int a[kMaxDim][kMaxDim];
int sumLine[kMaxDim][kMaxDim], sumColumn[kMaxDim][kMaxDim], sumDiagonal[kMaxDim][kMaxDim];
int main() {
std::ifstream inputFile("ferma2.in");
std::ofstream outputFile("ferma2.out");
int n, k;
inputFile >> n >> k;
int totalSum = 0;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= i; ++j) {
inputFile >> a[i][j];
totalSum += a[i][j];
sumLine[i][j] = a[i][j] + sumLine[i][j - 1];
sumColumn[i][j] = a[i][j] + sumColumn[i - 1][j];
sumDiagonal[i][j] = a[i][j] + sumDiagonal[i - 1][j - 1];
}
int size = n - k;
if (size == 0) {
outputFile << totalSum << '\n';
return 0;
}
int minSum = 0;
for (int i = 1; i <= size; ++i)
minSum += sumLine[i][i];
int startSum = minSum;
for (int i = 2; i + size - 1 <= n; ++i) {
startSum += sumLine[i + size - 1][size];
startSum -= sumDiagonal[i - 1 + size - 1][1 + size - 1];
int currSum = startSum;
minSum = std::min(minSum, currSum);
for (int j = 2; j <= i; ++j) {
currSum += sumDiagonal[i + size - 1][j + size - 1] - sumDiagonal[i - 1][j - 1];
currSum -= sumColumn[i + size - 1][j - 1] - sumColumn[i - 1][j - 1];
minSum = std::min(minSum, currSum);
}
}
outputFile << totalSum - minSum << '\n';
inputFile.close();
outputFile.close();
return 0;
}
//Trust me, I'm the Doctor!