Pagini recente » Cod sursa (job #1775274) | Cod sursa (job #261307) | Cod sursa (job #2529548) | Cod sursa (job #2496568) | Cod sursa (job #2056224)
#include <fstream>
#define file "ferma2"
using namespace std;
ifstream fin(file".in");
ofstream fout(file".out");
// dupa cele k zile vom ramane cu un triunghi de latura n-k.
// Astfel triunghiul de latura L = n-k ramas de suma minima va determina profitul maxim al elementelor taiate.
// Facem sume partiale pe linii,coloane si diagonale.
int sl[1002][1002]; //sume partiale pe linii
int sc[1002][1002]; //sume partiale pe coloane
int sd[1002][1002]; //sume partiale pe diag
int S, s, suma, smin, n, k;
int L;
int main()
{
fin>>n>>k;
L = n - k;
for(int i=1; i<=n; ++i)
for(int j=1; j<=i; ++j)
{
int x;
fin>>x;
S += x;
sc[i][j] = x + sc[i-1][j];
sl[i][j] = x + sl[i][j-1];
sd[i][j] = x + sd[i-1][j-1];
}
smin = 0;
for(int i=1; i<=L; ++i)
smin += sl[i][i];
suma = s = smin;
for(int i= L+1; i<=n; ++i)
{
s = s - sd[i-1][L] + sl[i][L];
suma = s;
smin = min(smin,suma);
for(int j = L+1; j<=i; ++j)
{
suma = suma - (sd[i][j] - sd[i-k][j-k]) + (sc[i][j-k] - sc[i-k][j-k]);
smin = min(smin,suma);
}
}
fout<<S - smin;
fin.close(); fout.close();
return 0;
}