ソートしてDPする。意外と時間がかかった。
- class MergersDivTwo {
- public:
- double findMaximum(vector <int> R, int k)
- {
- const int N = R.size();
- sort(R.begin(), R.end());
- vector<double> sum;
- partial_sum(R.begin(), R.end(), back_inserter(sum));
- double dp[N];
- fill(dp, dp + N, -(1e128));
- dp[0] = R[0];
- for (int i = 0; i <= N - k; ++i) {
- for (int j = k; i + j <= N; ++j) {
- dp[i + j - 1] = max(dp[i + j - 1], (dp[i] + sum[i + j - 1] - sum[i]) / (double)j);
- }
- }
- return dp[N - 1];
- }
- };
0 件のコメント :
コメントを投稿