Untitled
unknown
plain_text
2 years ago
2.0 kB
2
Indexable
Never
#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; }