제출 #1049062

#제출 시각아이디문제언어결과실행 시간메모리
1049062ihceker수열 (APIO14_sequence)C++14
50 / 100
2063 ms32604 KiB
#include<bits/stdc++.h> #define int long long #define MOD 1000000007 #define all(x) x.begin(),x.end() #define ff first #define ss second #define pb push_back #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); using namespace std; int32_t main(){ int n,k; cin>>n>>k; vector<vector<int>>dp(n+1,vector<int>(k+1,-1e15)),pre2(n+1,vector<int>(k+1)); vector<int>arr(n+1),pre(n+1); pre[0]=0; for(int i=1;i<=n;i++){ cin>>arr[i]; pre[i]=pre[i-1]+arr[i]; } dp[0][0]=0; for(int j=1;j<=k;j++){ for(int i=j;i<=n-1;i++){ for(int k=i-1;k>=j-1;k--){ dp[i][j]=max(dp[i][j],dp[k][j-1]+pre[k]*(pre[i]-pre[k])); if(dp[i][j]==dp[k][j-1]+pre[k]*(pre[i]-pre[k])){ pre2[i][j]=k; } } } } int mx=-1e15,ind; for(int i=k;i<=n-1;i++){ mx=max(mx,dp[i][k]+pre[i]*(pre[n]-pre[i])); if(mx==dp[i][k]+pre[i]*(pre[n]-pre[i])){ ind=i; } } vector<int>ans; while(ind!=0){ ans.pb(ind); ind=pre2[ind][k--]; } cout<<mx<<endl; while(ans.size()){ cout<<ans.back()<<" "; ans.pop_back(); } cout<<endl; }
#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...