Cod sursa(job #635342)

Utilizator Robert29FMI Tilica Robert Robert29 Data 19 noiembrie 2011 10:35:53
Problema Ferma2 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.83 kb
#include<stdio.h>
FILE*f=fopen("ferma2.in","r");
FILE*g=fopen("ferma2.out","w");
int j,sol,n,k,sum,min,a[1001][1001],b[1001][1001],c[1001][1001],d[1001][1001],v[1001][1001];
int main(){
	fscanf(f,"%d%d",&n,&k);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=i;++j){
			fscanf(f,"%d",&a[i][j]);
			b[i][j]=b[i-1][j]+a[i][j];
			c[i][j]=c[i][j-1]+a[i][j];
			d[i][j]=d[i-1][j-1]+a[i][j];
			sum+=a[i][j];
		}
		
	int m=n-k;	
	
	for(int i=1;i<=m;++i)
		for(int j=1;j<=i;++j)
			sol+=a[i][j];
	min=v[m][m]=sol;	
	for(int i=m+1;i<=n;++i){
		for(j=m;j<i;++j){
			v[i][j]=v[i-1][j]+c[i][j+1]-c[i][j-m]-d[i][j+1]+d[i-m-1][j-m];
			if(v[i][j]<min)
				min=v[i][j];
		}
		v[i][j]=v[i][j-1]+d[i][j]-d[i-m-1][j-m-1]-b[i][j-m];
		if(v[i][j]<min)
				min=v[i][j];
	}
	
	fprintf(g,"%d",sum-min);
	fclose(g);
	fclose(f);
	return 0;
}