Cod sursa(job #3279673)

Utilizator luc3lexa_Alexandrescu Luca luc3lexa_ Data 23 februarie 2025 20:13:50
Problema Ferma2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ferma2.in");
ofstream fout("ferma2.out");

const int nmax = 1010;
const int inf = 1e9;

struct information{
	int value,line,column,diagonal;
};

vector<vector<information>> values(nmax,vector<information> (nmax,{0,0,0,0}));
int n,k,base_triangle,total_sum,ans,aux_triangle;

void read_input(){
	fin >> n >> k;
	for(int i = 1; i <=n; i++){
		for(int j = 1; j <=i; j++){
			fin >> values[i][j].value;
			total_sum += values[i][j].value;
			values[i][j].line = values[i][j-1].line + values[i][j].value;
			values[i][j].column = values[i-1][j].column + values[i][j].value;
			values[i][j].diagonal = values[i-1][j-1].diagonal + values[i][j].value;
		}
	}
};

void solve(){
	int m = n-k;
	for(int i = 1; i <=m; i++){
		base_triangle += values[i][i].line;
	};
	ans = base_triangle;
	for(int i = m+1; i <=n; i++){
		aux_triangle = base_triangle + values[i][m].line - values[i-1][m].diagonal;
		base_triangle = aux_triangle;
		ans = min(ans,aux_triangle);
		for(int j = 2; j <= i-m+1; j++){
			aux_triangle = aux_triangle - (values[i][j-1].column - values[i-m][j-1].column) + (values[i][j+m-1].diagonal - values[i-m][j-1].diagonal);
			ans = min(ans,aux_triangle);
		}
	};
	fout << total_sum-ans;
};

int main(){
	read_input();
	solve();
	return 0;
}