제출 #82982

#제출 시각아이디문제언어결과실행 시간메모리
82982rezoldenK blocks (IZhO14_blocks)C++14
0 / 100
12 ms9536 KiB
#include <bits/stdc++.h>

#define maxn 100010
#define maxk 110
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define FORD(i,a,b) for(int i=a;i>=b;--i)

typedef long long ll;
using namespace std;
const char *fi="BLOCKS.INP";
const char *fo="BLOCKS.OUT";

int n,k,A[maxn],P[maxn];
ll F[maxn][maxk];

int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//	freopen(fi,"r",stdin);
//	freopen(fo,"w",stdout);
    cin>>n>>k;
    FOR(i,1,n) cin>>A[i];
    P[0]=0;
    FOR(i,1,n) P[i]=max(P[i-1],A[i]);

    FOR(i,1,n) F[i][1]=P[i];
    FOR(j,2,k){
        int maxright=0; ll sumleft=F[j-1][j-1];
        FOR(i,j,n){
            maxright = max(maxright,A[i]);
//            cout<<i<<' '<<j<<' '<<sumleft<<' '<<maxright<<' '<<(F[i-1][j-1]+P[i-1]+A[i])<<endl;
            if (sumleft+maxright < F[i-1][j-1]+A[i]) F[i][j]=sumleft+maxright;
            else {
                sumleft = F[i-1][j-1];
                maxright = A[i];
                F[i][j]=F[i-1][j-1]+A[i];
            }
        }
    }

    cout<<F[n][k];
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...