Submission #299300

#TimeUsernameProblemLanguageResultExecution timeMemory
299300AaronNaiduSplit the sequence (APIO14_sequence)C++14
50 / 100
521 ms17632 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll dp[2500][2500]; ll dpAns[2500][2500]; ll n, k; ll nums[2000]; ll prefSum[2000]; void explore(int s, int regions) { if (regions == 0) { return; } ll split = dpAns[s][regions]; //cout << "Exploring " << s << " " << f << " " << regions << "\n"; //cout << "Answer is " << split << " " << reg << "\n"; cout << split << " "; explore(split+1, regions - 1); } ll getDP(int s, int regions) { if (regions > n-s) { return -1000000000000; } if (regions == 0) { return 0; } if (dp[s][regions] >= 0) { return dp[s][regions]; } ll cand = 0; for (int i = s; i <= n-regions; i++) { ll thisCand = (prefSum[i] - prefSum[s-1]) * (prefSum[n] - prefSum[i]); ll maxLittleCand = -1; ll thisLeftRegions = 0; ll thisLittleCand = getDP(i+1, regions-1); if (maxLittleCand < thisLittleCand) { maxLittleCand = max(maxLittleCand, thisLittleCand); } thisCand += maxLittleCand; if (thisCand >= cand) { cand = max(cand, thisCand); dpAns[s][regions] = i; } } dp[s][regions] = cand; return cand; } int main() { cin >> n >> k; cin >> nums[1]; prefSum[1] = nums[1]; prefSum[0] = 0; for (int i = 1; i < n; i++) { cin >> nums[i+1]; prefSum[i+1] = prefSum[i] + nums[i+1]; } for (int i = 0; i <= n; i++) { for (int k = 0; k <= n; k++) { dp[i][k] = -1; } } ll ans = getDP(1, k); cout << ans << "\n"; //cout << "Exploring\n"; explore(1, k); //cout << "\b\n"; }

Compilation message (stderr)

sequence.cpp: In function 'll getDP(int, int)':
sequence.cpp:41:12: warning: unused variable 'thisLeftRegions' [-Wunused-variable]
   41 |         ll thisLeftRegions = 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...