제출 #879917

#제출 시각아이디문제언어결과실행 시간메모리
879917iskhakkutbilim수열 (APIO14_sequence)C++17
50 / 100
2058 ms32860 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ff first #define ss second #define all(a) a.begin(), a.end() const int mod = 1e17; const int N = 1e5; /* 7 3 4 1 3 4 0 2 3 */ signed main(){ //ios::sync_with_stdio(0); //cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; vector< vector<int> > dp(n + 1, vector<int>(k + 2, -mod)); vector< vector<int> > where(n + 1, vector<int>(k + 2, -1)); vector<int> a(n + 1, 0); for(int i = 1;i <= n; i++) cin >> a[i]; vector<int> suff(n + 2, 0), pref(n + 1, 0); suff[n] = a[n]; for(int i = 1;i <= n; i++) pref[i] = pref[i-1] + a[i]; for(int i = n-1;i >= 1; i--) suff[i] = suff[i + 1] + a[i]; dp[0][0] = 0; k++; for(int i = 1;i <= n; i++){ for(int sub = 1; sub <= k; sub++){ for(int j = i; j >= 1; j--){ int pr = pref[i] - pref[j-1]; if(dp[i][sub] < dp[j-1][sub-1] + (suff[i+1] * pr)){ dp[i][sub] = dp[j-1][sub-1] + (suff[i + 1] * pr); where[i][sub] = j - 1; } } } } vector<int> path; cout << dp[n][k] << '\n'; int idx = n; for(int j = k; j > 0 && idx > 0; j--){ if(where[idx][j]) cout << where[idx][j] << ' '; idx = where[idx][j]; } 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...