제출 #224749

#제출 시각아이디문제언어결과실행 시간메모리
224749urd05수열 (APIO14_sequence)C++14
0 / 100
41 ms33408 KiB
#include <bits/stdc++.h>
using namespace std;
 
long long dp[10001][201];
long long psum[10001];
int n;
 
void getans(int k,int l,int r,int al,int ar) {
    if (l>r) {
        return;
    }
    int mid=(l+r)/2;
    long long maxi=-1e18;
    int opt=-1;
    for(int i=al;i<=min(mid,ar);i++) {
        long long val=dp[i][k-1]+psum[i+1]*(psum[mid+1]-psum[i+1]);
        if (maxi<val) {
            maxi=val;
            opt=i;
        }
    }
    dp[mid][k]=maxi;
    getans(k,l,mid-1,al,opt);
    getans(k,mid+1,r,opt,ar);
}

vector<int> v;
 
int main(void) {
    int k;
    scanf("%d %d\n",&n,&k);
    for(int i=0;i<n;i++) {
    	long long x;
        scanf("%lld ",&x);
        if (x!=0) {
        	v.push_back(x);
        }
    }
    n=v.size();
  	if (n==0) {
    	printf("0");
      	return 0;
    }
    for(int i=0;i<n;i++) {
        psum[i+1]=psum[i]+v[i];
    }
    for(int i=0;i<n;i++) {
        for(int j=0;j<=k;j++) {
            dp[i][j]=-1e18;
        }
    }
    for(int i=0;i<n;i++) {
        dp[i][0]=0;
    }
    for(int i=1;i<=k;i++) {
        getans(i,0,n-1,0,n-1);
    }
    printf("%lld\n",dp[n-1][k]);
    int now=n-1;
    vector<int> ret;
    for(int i=k;i>=1;i--) {
        for(int j=now-1;j>=0;j--) {
            if (dp[j][i-1]+psum[j+1]*(psum[now+1]-psum[j+1])==dp[now][i]) {
                ret.push_back(j);
                now=j;
                break;
            }
        }
    }
    reverse(ret.begin(),ret.end());
    for(int i=0;i<k;i++) {
        printf("%d ",ret[i]+1);
    }
}

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

sequence.cpp: In function 'int main()':
sequence.cpp:31:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d\n",&n,&k);
     ~~~~~^~~~~~~~~~~~~~~~~
sequence.cpp:34:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld ",&x);
         ~~~~~^~~~~~~~~~~~
#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...