제출 #693664

#제출 시각아이디문제언어결과실행 시간메모리
693664MurotY수열 (APIO14_sequence)C++14
0 / 100
2083 ms24216 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> #define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define ll long long #define ull unsigned long long #define ff first #define ss second #define all(a) a.begin(), a.end() #define sz size() using namespace std; const ll N=1e6+7, M=1e9+7; ll a[N]; pair <ll, vector <int>> memo[1005][205]; void solve() { int n, k; cin >> n >> k; ll sum=0; for (int i=1;i<=n;i++) cin >> a[i], sum+=a[i]; if (k == 0){ cout << sum; return ; } auto dp = [&] (auto& dp, int i, int k, ll sum) -> pair <ll,vector <int>> { vector <int> vc; vc.clear(); if (k <= 0 || i >= n+1) return {0, vc}; // if (memo[i][k].ff != -1) return memo[i][k]; ll cur=0, ans=0; for (int j=i;j<=n;j++){ sum-=a[j], cur+=a[j]; pair <ll, vector <int>> res=dp(dp, j+1, k-1, sum); if (ans < sum*cur+res.ff){ vc.clear(); vc.push_back(j); for (auto l:res.ss) vc.push_back(l); ans=sum*cur+res.ff; } } memo[i][k]=make_pair(ans, vc); return {ans, vc}; }; for (int i=0;i<=n;i++){ for (int j=0;j<=k;j++) memo[i][j].ff=-1; } pair <ll, vector <int>> res=dp(dp, 1, k, sum); cout << res.ff <<"\n"; for (auto l:res.ss) cout << l <<" "; return ; } int main(){ ios; int t=1; // cin >> t; while (t--){ solve(); cout << "\n"; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...