제출 #59604

#제출 시각아이디문제언어결과실행 시간메모리
59604KLPP수열 (APIO14_sequence)C++14
0 / 100
2053 ms8264 KiB
#include<stdio.h>
#include<iostream>
using namespace std;
typedef long long int lld;
#define INF 1000000000000000000
lld sq(int x){
	return x*x;
}
int main(){
	int n,k;
	scanf("%d %d",&n,&k);
	lld arr[n];
	for(int i=0;i<n;i++){
		scanf("%lld",&arr[i]);
	}
	lld DP[n+1][k+2];
	int prev[n+1][k+2];
	lld acc[n+1];
	acc[0]=0;
	for(int i=0;i<n;i++){
		acc[i+1]=acc[i]+arr[i];
	}
	for(int i=0;i<=n;i++){
		for(int j=0;j<=k+1;j++){
			DP[i][j]=INF;
			prev[i][j]=-1;
		}
	}
	DP[0][0]=0;
	
	for(int parts=0;parts<=k;parts++){
		for(int i=0;i<n;i++){
			for(int j=i+1;j<=n;j++){
				if(DP[j][parts+1]>DP[i][parts]+sq(acc[j]-acc[i])){
					DP[j][parts+1]=DP[i][parts]+sq(acc[j]-acc[i]);
					prev[j][parts+1]=i;
				}
			}
		}
	}
	/*for(int parts=0;parts<=k+1;parts++){
		for(int i=0;i<=n;i++){
			printf("%d ",prev[i][parts]);
		}printf("\n");
	}*/
	lld ans=sq(acc[n])-DP[n][k+1];
	ans/=2;
	printf("%lld\n",ans);
	int index=n;
	int partition=k+1;
	while(index>0){
		index=prev[index][partition];
		partition--;
		if(index>0)printf("%d ",index);
	}
	printf("\n");

	return 0;
}

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

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