Mai intai trebuie sa te autentifici.
Cod sursa(job #638518)
Utilizator | Data | 20 noiembrie 2011 21:59:14 | |
---|---|---|---|
Problema | Ferma2 | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.03 kb |
#include <fstream>
using namespace std;
const char InFile[]="ferma2.in";
const char OutFile[]="ferma2.out";
const int MaxN=1024;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,S,Smin,K,A[MaxN][MaxN],SOL[MaxN][MaxN],L[MaxN][MaxN],C[MaxN][MaxN],D[MaxN][MaxN];
int main()
{
fin>>N>>K;
for(int i=1;i<=N;++i)
{
for(int j=1;j<=i;++j)
{
fin>>A[i][j];
S+=A[i][j];
L[i][j]=L[i][j-1]+A[i][j];
C[i][j]=C[i-1][j]+A[i][j];
D[i][j]=D[i-1][j-1]+A[i][j];
}
}
fin.close();
K=N-K;
for(int i=1;i<=K;++i)
{
for(int j=1;j<=i;++j)
{
SOL[1][1]+=A[i][j];
}
}
int Smin=SOL[1][1];
for(int i=2;i<=N-K+1;++i)
{
SOL[i][1]=SOL[i-1][1]-D[i+K-2][K]+L[i+K-1][K];
Smin=min(Smin,SOL[i][1]);
for(int j=2;j<=i;++j)
{
SOL[i][j]=SOL[i][j-1]+D[i+K-1][j+K-1]-D[i-1][j-1]-(C[i+K-1][j-1]-C[i-1][j-1]);
Smin=min(Smin,SOL[i][j]);
}
}
fout<<S-Smin;
fout.close();
return 0;
}