Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32910 gaochunzhen 【S】T1 C++ 通过 100 200 MS 20020 KB 1080 2024-10-02 14:26:35

Tests(10/10):


#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e3 + 9, M = 5e3 + 9; int n, m, a[N], cnt[M], dp[N][M]; signed main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); cnt[a[i]]++; } for (int i = 1; i <= 5000; i++) cnt[i] += cnt[i - 1]; memset(dp, 0x3f, sizeof(dp)); dp[0][0] = 0; int i = 0; for (int p = __lg(n); p >= 0; p--) { for (int j = 0; j <= m; j++) { for (int k = 0; k <= m - j; k++) { dp[i << 1][j + k] = min(dp[i << 1][j + k], dp[i][j] + dp[i][k]); } } i <<= 1; if (n & (1 << p)) { for (int j = 0; j <= m; j++) { for (int k = 0; k <= m - j; k++) { dp[i + 1][j + k] = min(dp[i + 1][j + k], dp[i][j] + (n - cnt[k])); } } i++; } } int ans = 1e9; for (int i = 0; i <= m; i++) ans = min(ans, dp[n][i]); printf("%.15f\n", 1.0 * ans / n); return 0; }


测评信息: