Cod sursa(job #639225)
#include<fstream>
#include<algorithm>
using namespace std;
int n,k,i,j,a[1001][1001],lin[1001][1001],col[1001][1001],diag[1001][1001],s,m,curent,smin;
int sol[1001][1001];
int main()
{
ifstream f("ferma2.in");
ofstream g("ferma2.out");
f>>n>>k;
for(i=1;i<=n;++i)
for(j=1;j<=i;++j)
{
f>>a[i][j],s+=a[i][j];
col[i][j]=col[i-1][j]+a[i][j];
lin[i][j]=lin[i][j-1]+a[i][j];
diag[i][j]=diag[i-1][j-1]+a[i][j];
}
m=n-k;
for(i=1;i<=m;++i)
sol[1][1]+=col[m][i];
smin=sol[1][1];
for(i=2;i<=n-m+1;++i)
{
sol[i][1]=sol[i-1][1]-diag[i+m-2][m]+lin[i+m-1][m];
smin=min(smin,sol[i][1]);
for(j=2;j<=i;++j)
{
sol[i][j]=sol[i][j-1]-col[i+m-1][j-1]+col[i-1][j-1]+diag[i+m-1][j+m-1]-diag[i-1][j-1];
smin=min(smin,sol[i][j]);
}
}
g<<s-smin;
return 0;
}