ABC 327

https://atcoder.jp/contests/abc327

A. ab

https://atcoder.jp/contests/abc327/tasks/abc327_a

B. A^A

https://atcoder.jp/contests/abc327/tasks/abc327_b

C. Number Place

https://atcoder.jp/contests/abc327/tasks/abc327_c

D. Good Tuple Problem

https://atcoder.jp/contests/abc327/tasks/abc327_d

E. Maximize Rating

https://atcoder.jp/contests/abc327/tasks/abc327_e

自力 AC

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N;
    cin >> N;
    vll P(N + 1);
    rep(i, N) cin >> P[i + 1];

    double INF = 100000;
    // dp[i][num]: i番目までの問題を選んで、num 個選んだときの \sum_{i=1}^k (0.9)^{k-i} Q[i] の最大値
    vector dp(N + 1, vector<double>(N + 1, -INF));
    dp[0][0] = 0;
    rep2(i, 1, N + 1) {
        rep(num, i + 1) {
            chmax(dp[i][num], dp[i - 1][num]);

            if (dp[i - 1][num] != -INF)
                chmax(dp[i][num + 1], dp[i - 1][num] * 0.9 + P[i]);
        }
    }

    vector<double> pow(N + 1), prd(N + 1);
    pow[0] = prd[0] = 1;
    rep2(i, 1, N + 1) {
        pow[i] = pow[i - 1] * 0.9;
        prd[i] += pow[i] + prd[i - 1];
    }

    double ans = -INF;
    rep2(num, 1, N + 1) {
        chmax(ans, dp[N][num] / prd[num - 1] - 1200.0 / sqrt(num));
    }
    printf("%.9lf\n", ans);
}

F. Apples

https://atcoder.jp/contests/abc327/tasks/abc327_f

G. Many Good Tuple Problems

https://atcoder.jp/contests/abc327/tasks/abc327_g