結果
問題 | No.409 ダイエット |
ユーザー | snrnsidy |
提出日時 | 2021-06-15 00:28:35 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 58 ms / 2,000 ms |
コード長 | 2,658 bytes |
コンパイル時間 | 2,457 ms |
コンパイル使用メモリ | 207,372 KB |
実行使用メモリ | 16,360 KB |
最終ジャッジ日時 | 2024-06-07 10:01:36 |
合計ジャッジ時間 | 7,411 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 3 ms
8,100 KB |
testcase_01 | AC | 4 ms
8,064 KB |
testcase_02 | AC | 3 ms
8,192 KB |
testcase_03 | AC | 5 ms
8,064 KB |
testcase_04 | AC | 4 ms
8,164 KB |
testcase_05 | AC | 4 ms
8,192 KB |
testcase_06 | AC | 4 ms
8,152 KB |
testcase_07 | AC | 5 ms
8,192 KB |
testcase_08 | AC | 4 ms
8,064 KB |
testcase_09 | AC | 5 ms
8,072 KB |
testcase_10 | AC | 4 ms
8,064 KB |
testcase_11 | AC | 5 ms
8,028 KB |
testcase_12 | AC | 4 ms
8,080 KB |
testcase_13 | AC | 4 ms
8,120 KB |
testcase_14 | AC | 4 ms
8,192 KB |
testcase_15 | AC | 4 ms
8,176 KB |
testcase_16 | AC | 4 ms
8,064 KB |
testcase_17 | AC | 5 ms
8,064 KB |
testcase_18 | AC | 4 ms
8,128 KB |
testcase_19 | AC | 4 ms
8,172 KB |
testcase_20 | AC | 5 ms
8,320 KB |
testcase_21 | AC | 4 ms
8,032 KB |
testcase_22 | AC | 4 ms
7,992 KB |
testcase_23 | AC | 5 ms
8,152 KB |
testcase_24 | AC | 5 ms
8,112 KB |
testcase_25 | AC | 3 ms
8,064 KB |
testcase_26 | AC | 5 ms
8,164 KB |
testcase_27 | AC | 4 ms
8,192 KB |
testcase_28 | AC | 5 ms
8,108 KB |
testcase_29 | AC | 5 ms
8,048 KB |
testcase_30 | AC | 3 ms
8,152 KB |
testcase_31 | AC | 5 ms
8,192 KB |
testcase_32 | AC | 4 ms
8,148 KB |
testcase_33 | AC | 4 ms
8,024 KB |
testcase_34 | AC | 4 ms
8,064 KB |
testcase_35 | AC | 5 ms
8,120 KB |
testcase_36 | AC | 5 ms
8,428 KB |
testcase_37 | AC | 5 ms
8,308 KB |
testcase_38 | AC | 5 ms
8,248 KB |
testcase_39 | AC | 5 ms
8,192 KB |
testcase_40 | AC | 5 ms
8,180 KB |
testcase_41 | AC | 5 ms
8,232 KB |
testcase_42 | AC | 5 ms
8,192 KB |
testcase_43 | AC | 4 ms
8,192 KB |
testcase_44 | AC | 5 ms
8,288 KB |
testcase_45 | AC | 5 ms
8,376 KB |
testcase_46 | AC | 4 ms
8,240 KB |
testcase_47 | AC | 4 ms
8,276 KB |
testcase_48 | AC | 4 ms
8,192 KB |
testcase_49 | AC | 5 ms
8,192 KB |
testcase_50 | AC | 5 ms
8,152 KB |
testcase_51 | AC | 5 ms
8,320 KB |
testcase_52 | AC | 5 ms
8,192 KB |
testcase_53 | AC | 5 ms
8,192 KB |
testcase_54 | AC | 4 ms
8,276 KB |
testcase_55 | AC | 26 ms
12,136 KB |
testcase_56 | AC | 34 ms
10,216 KB |
testcase_57 | AC | 50 ms
16,360 KB |
testcase_58 | AC | 24 ms
10,968 KB |
testcase_59 | AC | 33 ms
12,260 KB |
testcase_60 | AC | 21 ms
10,900 KB |
testcase_61 | AC | 44 ms
14,216 KB |
testcase_62 | AC | 48 ms
16,232 KB |
testcase_63 | AC | 46 ms
14,116 KB |
testcase_64 | AC | 26 ms
11,876 KB |
testcase_65 | AC | 47 ms
13,800 KB |
testcase_66 | AC | 50 ms
16,176 KB |
testcase_67 | AC | 39 ms
13,888 KB |
testcase_68 | AC | 31 ms
12,280 KB |
testcase_69 | AC | 43 ms
14,144 KB |
testcase_70 | AC | 48 ms
13,916 KB |
testcase_71 | AC | 27 ms
11,184 KB |
testcase_72 | AC | 58 ms
16,232 KB |
testcase_73 | AC | 54 ms
14,264 KB |
testcase_74 | AC | 36 ms
13,500 KB |
testcase_75 | AC | 56 ms
16,108 KB |
testcase_76 | AC | 40 ms
13,692 KB |
testcase_77 | AC | 27 ms
10,336 KB |
testcase_78 | AC | 33 ms
13,344 KB |
testcase_79 | AC | 25 ms
11,068 KB |
testcase_80 | AC | 55 ms
16,232 KB |
testcase_81 | AC | 53 ms
14,248 KB |
testcase_82 | AC | 43 ms
13,728 KB |
testcase_83 | AC | 44 ms
13,840 KB |
testcase_84 | AC | 36 ms
12,268 KB |
testcase_85 | AC | 7 ms
8,372 KB |
testcase_86 | AC | 36 ms
12,264 KB |
testcase_87 | AC | 50 ms
14,048 KB |
testcase_88 | AC | 22 ms
10,152 KB |
testcase_89 | AC | 39 ms
10,228 KB |
testcase_90 | AC | 20 ms
9,448 KB |
testcase_91 | AC | 42 ms
10,576 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long lint; typedef long double llf; typedef pair<lint, lint> pi; struct line { long long int a, b; }; struct cht { vector<pi> v; int p; double cross(int a, int b) { return (1.0 * (v[a].second - v[b].second)) / (v[b].first - v[a].first); } lint query(long long int x) { if (v.empty()) return 1e18; while (p + 1 < v.size() && v[p].first * x + v[p].second > v[p + 1].first * x + v[p + 1].second) p++; return v[p].first * x + v[p].second; } lint query2(long long int x) { int l = 0; int r = v.size() - 1; while (l != r) { int m = (l + r) / 2; if (cross(m, m + 1) <= x) { l = m + 1; } else { r = m; } } return v[l].first * x + v[l].second; } bool chk(pi a, pi b, pi c) { return 1ll * (b.first - a.first) * (b.second - c.second) < (c.first - b.first) * (a.second - b.second); } void add(int x, lint y) { if (!v.empty() && v.back().first == x) { if (v.back().second > y) return; v.pop_back(); } while (v.size() >= p + 2 && chk(v[v.size() - 2], v.back(), pi(x, y))) { v.pop_back(); } v.emplace_back(x, y); } }cht; long long int dp[2][300005]; int main(void) { cin.tie(0); ios::sync_with_stdio(false); long long int N, A, W, B, t; vector <long long int> D; cin >> N >> A >> B >> W; for (int i = 0; i < N; i++) { cin >> t; D.push_back(t); } fill(dp[0], dp[0] + 300005, 1e18); fill(dp[1], dp[1] + 300005, 1e18); dp[1][0] = W; /* for (int i = 1; i <= N; i++) { for (int j = 0; j < 2; j++) { dp[1][i] = min(dp[1][i], dp[j][i - 1] + D[i - 1]); } for (int j = 0; j < i; j++) { long long int n = i - j; long long int sum = n * (n + 1) / 2; sum *= B; sum -= (A * n); dp[0][i] = min(dp[0][i], dp[1][j] + sum); } } */ //dp[0][x] = min(0<=y<x) dp[1][y] + B*(x-y)*(x-y+1)/2 - A*(x-y) //dp[1][y] + B/2*(x^2-xy+x-xy+y^2-y) - A*(x-y) //dp[1][y] - B*x*y + (B/2)(x^2 + y^2 + x - y) - A * (x-y) //dp[1][y] - Bxy + (B/2)(x^2 + x) - Ax + (B/2)(y^2 - y) + A*y // A[x] = -Bx , B[y] = y , C[y] = dp[1][y] + (B/2)(y^2 - y) + Ay , D[x] = (B/2)(x^2 + x) - Ax line ins; ins.a = 0; ins.b = dp[1][0]; cht.add(ins.a, ins.b); for (long long int i = 1; i <= N; i++) { for (int j = 0; j < 2; j++) { dp[1][i] = min(dp[1][i], dp[j][i - 1] + D[i - 1]); } //cout << cht.query2(B*i) + (B * ((i * (i + 1)) / 2)) - (A * i) << '\n'; dp[0][i] = min(dp[0][i], cht.query2(B*i) + (B * ((i * (i + 1)) / 2)) - (A * i)); line ins; ins.a = -i; ins.b = dp[1][i] + (B * ((i*(i-1)) / 2)) + A * i; cht.add(ins.a, ins.b); } cout << min(dp[0][N],dp[1][N]) << '\n'; return 0; }