제출 #1332842

#제출 시각아이디문제언어결과실행 시간메모리
1332842KhoaDuy수열 (APIO14_sequence)C++20
100 / 100
1038 ms81456 KiB
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
const int MAXN=1e5,MAXK=201;
int opt[MAXK+1][MAXN+1];
int pre[MAXN+1];
vector<ll> DP,nxt;
const ll limit=1e18;
ll calc(int l,int r){
    return (1LL*(pre[r]-pre[l-1])*(pre[r]-pre[l-1]));
}
void dnc(int phase,int l,int r,int optl,int optr){
    if(l>r){
        return;
    }
    int mid=((l+r)>>1);
    for(int i=optl;i<=min(optr,mid-1);i++){
        ll cost=calc(i+1,mid);
        if(DP[i]+calc(i+1,mid)<nxt[mid]){
            nxt[mid]=DP[i]+cost;
            opt[phase][mid]=i;
        }
    }
    dnc(phase,l,mid-1,optl,opt[phase][mid]);
    dnc(phase,mid+1,r,opt[phase][mid],optr);
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    if(fopen("input.txt","r")){
        freopen("input.txt","r",stdin);
    }
    if(fopen("sequence.in","r")){
        freopen("sequence.in","r",stdin);
        freopen("sequence.out","w",stdout);
    }
    memset(opt,-1,sizeof(opt));
    int n,k;
    cin >> n >> k;
    k++;
    DP.assign(n+1,limit);
    pre[0]=0;
    for(int i=1;i<=n;i++){
        int x;
        cin >> x;
        pre[i]=pre[i-1]+x;
    }
    DP[0]=0;
    for(int i=1;i<=k;i++){
        nxt.assign(n+1,limit);
        dnc(i,i,n,0,n-1);
        swap(DP,nxt);
    }
    ll ans=(calc(1,n)-DP[n])/2;
    int pos=n;
    cout << ans << endl;
    for(int i=k;i>1;i--){
        cout << opt[i][pos] << ' ';
        pos=opt[i][pos];
    }

}

컴파일 시 표준 에러 (stderr) 메시지

sequence.cpp: In function 'int main()':
sequence.cpp:32:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |         freopen("input.txt","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
sequence.cpp:35:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |         freopen("sequence.in","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sequence.cpp:36:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |         freopen("sequence.out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...