# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
428722 | shenxy | Sparklers (JOI17_sparklers) | C++11 | 457 ms | 8260 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 <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const long long INF = 1LL << 60;
int N, K;
long long T, X[1000], m, dpt[1000][1000];
long long dp(int a, int b) {
if (a == K - 1 && b == K - 1) return 2 * m * T;
if (a == b) return -INF;
if (dpt[a][b] != -1) return dpt[a][b];
return dpt[a][b] = max(dp(a + 1, b) + (X[a] - X[a + 1]) / 2 < 0 ? -INF : dp(a + 1, b) + (X[a] - X[a + 1]) / 2, dp(a, b - 1) + (X[b - 1] - X[b]) / 2 < 0 ? -INF : dp(a, b - 1) + (X[b - 1] - X[b]) / 2) + 2 * m * T;
}
int main() {
scanf("%d %d %lld", &N, &K, &T);
for (int i = 0; i < N; ++i) scanf("%lld", &X[i]), X[i] *= 2;
long long l = 0, u = 10000000000 / T;
while (l != u) {
m = (l + u) / 2;
memset(dpt, -1, sizeof dpt);
if (dp(0, N - 1) < 0) l = m + 1;
else u = m;
}
printf("%lld", l);
return 0;
}
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... |