Cod sursa(job #2756626)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 1 iunie 2021 22:05:38
Problema Ferma2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
struct ura
{
	int l; // linie
	int c; // coloana
	int d; // diagonala
};
ura dp[1001][1001];
int main()
{
	ifstream cin("ferma2.in");
	ofstream cout("ferma2.out");
	int n,k;
	long long sum=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
		{
			/*
			if(j<=i)
				cin>>ma[i][j];
			else
				ma[i][j]=0;
			*/
			int nr;
			cin>>nr;
			sum+=nr;
			dp[i][j].l=dp[i][j-1].l+nr;
			dp[i][j].c=dp[i-1][j].c+nr;
			dp[i][j].d=dp[i-1][j-1].d+nr;
		}
	}	
	long long sumi=0;
	k=n-k;
	for(int i=1;i<=k;i++)
	{
		sumi+=dp[i][i].l;
	}
	long long minim;
	minim=sumi;
	for(int i=2;i<=n-k+1;i++)
	{
		sumi+=dp[i+k-1][k].l;
		sumi-=dp[i+k-2][k].d;
		minim=min(minim,sumi);
		int sump=sumi;
		for(int j=2;j<=i;j++)
		{
			sump=sump+dp[i+k-1][j+k-1].d-dp[i-1][j-1].d;
			sump=sump-dp[i+k-1][j-1].c+dp[i-1][j-1].c;
			minim=min(minim,sump*1LL);
		}
	}
	cout<<sum-minim;	
}