Untitled
unknown
plain_text
3 years ago
2.0 kB
8
Indexable
#include <bits/stdc++.h>
using namespace std;
ifstream fin("diamante.in");
ofstream fout("diamante.out");
long long int c, n, k, v[505][505], sum[1005], maxsum=-1, suma;
pair<int, int> idx[1025];
int sum_dp(int i, int j){
if(i>n || j>n || i<1 || j<1) return 0;
return v[i][j]+sum_dp(i+1, j+1);
}
int sum_ds(int i, int j){
if(i>n || j>n || i<1 || j<1) return 0;
return v[i][j]+sum_ds(i+1, j-1);
}
void zero_dp(int i, int j){
if(i>n || j>n || i<1 || j<1) return;
v[i][j]=0;
zero_dp(i+1, j+1);
}
int cerinta1(){
int q=0, in=1, sf=k;
suma=0;
for(int i=n; i>=1; i--){
sum[++q]=sum_dp(i, 1);
idx[q]={i, 1};
}
for(int j=2; j<=n; j++){
sum[++q]=sum_dp(1, j);
idx[q]={1, j};
}
for(int i=1; i<=k; i++){
suma+=sum[i];
}
maxsum=suma;
for(int i=k+1; i<=2*n-1; i++){
suma=suma+sum[i]-sum[i-k];
if(maxsum<suma){
in=i-k+1, sf=i;
maxsum=suma;
}
else if(maxsum==suma){
}
}
for(int i=in; i<=sf; i++){
zero_dp(idx[i].first, idx[i].second);
}
return maxsum;
}
int cerinta2(){
int q=0;
suma=0;
for(int j=1; j<=n; j++){
sum[++q]=sum_ds(1, j);
}
for(int i=2; i<=n; i++){
sum[++q]=sum_ds(i, n);
}
for(int i=1; i<=k; i++){
suma+=sum[i];
}
maxsum=suma;
for(int i=k+1; i<=2*n-1; i++){
suma=suma+sum[i]-sum[i-k];
maxsum=max(maxsum, suma);
}
return maxsum;
}
int main(){
fin>>c;
fin>>n>>k;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
fin>>v[i][j];
}
}
if(c==1){
fout<<cerinta1();
}
if(c==2){
fout<<cerinta2();
}
if(c==3){
fout<<cerinta1()+cerinta2();
}
return 0;
}Editor is loading...