Pagini recente » Cod sursa (job #1076891) | Cod sursa (job #1063944) | Cod sursa (job #2099153) | Cod sursa (job #2163844) | Cod sursa (job #2056223)
#include <bits/stdc++.h>
#define nmax 1001
using namespace std;
/// matricea initiala nu e necesara
int sl[nmax][nmax]; /// sume partiale pe linii
int sc[nmax][nmax]; /// sume partiale pe coloane
int sd[nmax][nmax]; /// sume partiale pe diagonale
int n, k, L;
int S; /// suma totala a matricei
/// determin suma minima a unui triunghi dreptunghic
/// cu latura L = n - k
int main()
{
int i, j, x, s, s1, smin;
/// citire simultan cu sumele partiale
ifstream fin("ferma2.in");
fin >> n >> k;
L = n - k;
for (i = 1; i <= n; ++i)
for (j = 1; j <= i; ++j)
{
fin >> x;
///a[i][j] = x;
S += x;
sl[i][j] = x + sl[i][j - 1];
sc[i][j] = x + sc[i - 1][j];
sd[i][j] = x + sd[i - 1][j - 1];
}
fin.close();
/// calculez suma triunghiului format din primele L linii
s = 0;
for (i = 1; i <= L; ++i)
s += sl[i][i];
smin = s1 = s;
for (i = 2; i <= n - L + 1; i++)
{
s1 = s = s1 + sl[i + L - 1][L] - sd[i + L - 2][L];
smin = min(smin, s);
for (j = 2; j <= i; ++j)
{
s = s - (sc[i+L-1][j-1] - sc[i-1][j-1]) +
(sd[i+L-1][j+L-1] - sd[i-1][j-1]);
smin = min(smin, s);
}
}
ofstream fout("ferma2.out");
smin = S - smin;
fout << smin << "\n";
fout.close();
return 0;
}