제출 #1216397

#제출 시각아이디문제언어결과실행 시간메모리
1216397ASGA_RedSeaCatfish Farm (IOI22_fish)C++20
70 / 100
954 ms2162688 KiB
/**

                                    * بسم الله الرحمن الرحيم *

                ﴾ رَبِّ اشْرَحْ لِي صَدْرِي * وَيَسِّرْ لِي أَمْرِي * وَاحْلُلْ عُقْدَةً مِّن لِّسَانِي * يَفْقَهُوا قَوْلِي ﴿

*/

/// author : "ASGA"

#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>

using namespace std;
using ll=long long;





ll max_weights(int N,int M,vector<int>X,vector<int>Y,vector<int>W){
    int n=1,m=1;

    for(int i=0;i<M;i++){n=max(n,X[i]+5);m=max(m,Y[i]+5);}

    n=min(n,N);m=min(m,N);

    if(n*m>1e7){
        int spt=1;
        for(int&i:X)spt&=(i%2==0);
        if(spt)return accumulate(W.begin(),W.end(),0LL);


    }

    vector<vector<ll>>w(n,vector<ll>(m,0));
    for(int i=0;i<M;i++){
        w[X[i]][Y[i]]=W[i];
    }

    vector<vector<ll>>d(n,vector<ll>(m+1,0));
    vector<ll>mx(n,0);

    vector<ll>d1(m+1,0),d2(m+1,0);
    for(int i=1;i<n;i++){
        vector<ll>p(m+1,0);
        ll s=accumulate(w[i].begin(),w[i].end(),0LL);
        for(int j=m-1;j>=0;j--){
            p[j]=max(p[j+1],d[i-1][j+1]+s);
            s-=w[i][j];
        }

        s=0;
        for(int j=m-1;j>=0;j--){
            s+=w[i-1][j];
            d1[j]+=s;
        }
        for(int j=1;j<=m;j++)d1[j]=max(d1[j],d1[j-1]);

        s=0;
        ll ss=accumulate(w[i-1].begin(),w[i-1].end(),0LL);
        ll sss=0;
        for(int j=0;j<=m;j++){
            ll&r=d[i][j];

            r=d1[j]-ss;
            if(i>1)r=max(r,mx[i-2]+sss);

            d2[j]=r;

            r=max(p[j]-s,r);
            if(j<m){s+=w[i][j];ss-=w[i-1][j];sss+=w[i-1][j];}
            r=max(r,mx[i-1]);
            mx[i]=max(mx[i],r);

        }
        d1=d2;
    }

    return *max_element(d.back().begin(),d.back().end());
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...