Pagini recente » Cod sursa (job #2745580) | Cod sursa (job #2136724) | Cod sursa (job #2839432) | Cod sursa (job #1039488) | Cod sursa (job #1783412)
#include <cstdio>
#include <cctype>
#define MAXBUF 1<<17
FILE*fi,*fout;
char buf[MAXBUF];
int pos=MAXBUF;
inline char nextch(){
if(pos==MAXBUF){
fread(buf,1,MAXBUF,fi);
pos=0;
}
return buf[pos++];
}
inline int getnr(){
char a=nextch();
while(isdigit(a)==0)
a=nextch();
int nr=0;
while(isdigit(a)==1){
nr=nr*10+a-'0';
a=nextch();
}
return nr;
}
#define MAXN 1000
int mat[MAXN+1][MAXN+1];
int dp[MAXN+1][MAXN+1];
int sl[MAXN+1][MAXN+1];
int sd[MAXN+1][MAXN+1];
int sc[MAXN+1][MAXN+1];
inline int getmin(int a,int b){
if(a<b) return a;
return b;
}
int main(){
int i,j,n,m,l,k,sum,min,s;
fi=fopen("ferma2.in" ,"r");
fout=fopen("ferma2.out" ,"w");
n=getnr();
k=getnr();
sum=0;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++){
mat[i][j]=getnr();
sum+=mat[i][j];
sl[i][j]=sl[i][j-1]+mat[i][j];
sd[i][j]=sd[i-1][j-1]+mat[i][j];
sc[i][j]=sc[i-1][j]+mat[i][j];
}
l=n-k;
s=0;
for(i=1;i<=l;i++)
for(j=1;j<=i;j++)
s+=mat[i][j];
dp[l][l]=s;
min=s;
for(i=l+1;i<=n;i++){
dp[i][l]=dp[i-1][l]+sl[i][l]-sd[i-1][l];
min=getmin(min,dp[i][l]);
for(j=l+1;j<=i;j++){
dp[i][j]=dp[i][j-1]+sd[i][j]-sd[i-l][j-l]-sc[i][j-l]+sc[i-l][j-l];
min=getmin(min,dp[i][j]);
}
}
fprintf(fout,"%d" ,sum-min);
fclose(fi);
fclose(fout);
return 0;
}