# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1002895 | ThegeekKnight16 | Cigle (COI21_cigle) | C++17 | 389 ms | 524288 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
vector<int> d(N+1);
for (int i = 1; i <= N; i++) cin >> d[i];
vector<vector<vector<int>>> C(N+1, vector<vector<int>>(N+1, vector<int>(N+1)));
for (int i = 1; i <= N; i++)
for (int j = i+1; j <= N; j++)
{
vector<int> somas;
int sum = 0;
for (int k = j-1; k >= i; k--) sum += d[k], somas.push_back(sum);
somas.pop_back();
sum = 0; int resp = 0, p = 0;
for (int k = j; k <= N; k++)
{
C[i][j][k] = resp;
sum += d[k];
while (p < somas.size() && somas[p] < sum) ++p;
if (p < somas.size() && somas[p] == sum) resp++, ++p;
}
}
vector<vector<int>> dp(N+1, vector<int>(N+1));
for (int i = 2; i <= N; i++)
for (int j = i; j <= N; j++)
{
dp[i][j] = 0;
for (int k = 1; k < i; k++) dp[i][j] = max(dp[i][j], dp[k][i-1] + C[k][i][j]);
// cerr << "dp[" << i << " " << j << "]: " << dp[i][j] << '\n';
}
int resp = 0;
for (int i = 1; i <= N; i++) resp = max(resp, dp[i][N]);
cout << resp << '\n';
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |