Cod sursa(job #696599)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 28 februarie 2012 19:10:45
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <iostream>
using namespace std;

int tr[1004][1005];
int dp[1004][1005];

int main()
{	
	int n,k,S=0,Smin=1<<30;
	freopen("ferma2.in","r", stdin);
	freopen("ferma2.out","w", stdout);
	scanf("%d %d\n",&n,&k);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
		{
			scanf("%d",&tr[i][j]);
			dp[i][j]+=dp[i-1][j-1]+tr[i][j];
			S+=tr[i][j];
		}

	/*for(int i=1;i<=n;i++,cout<<endl)
		for(int j=1;j<=i;j++)
			cout<<tr[i][j]<<" ";*/
	
	/*for(int i=1;i<=n;i++,cout<<endl)
		for(int j=1;j<=i;j++)
			cout<<dp[i][j]<<" ";	
		cout<<S<<endl;*/
	
	// caut triunghi de latura n-k
	for(int i=n-k-1;i<=n;i++)
		for(int j=1;j+n-k-1<=i;j++)
		{
			int Str=0,ind=1;
			for(int c=j;c<j+n-k;c++)
			{
				Str+=dp[i][c]-dp[i-ind][j-1];
				//cout<<" : "<<dp[i][c]<<" - : "<<dp[i-ind][j-1]<<" : ind :"<<ind<<endl;
				ind++;
			}
			Smin=min(Str,Smin);
		}
	printf("%d",S-Smin);
	return 0;
}