Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
28501 gaochunzhen 【BJ】T3 C++ 通过 100 166 MS 296 KB 1195 2024-04-14 21:09:04

Tests(10/10):


#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 509; struct node { int m, v, r, c[9]; } a[N]; int n, pr[] = {0, 2, 3, 5, 7, 11, 13, 17, 19}, px[] = {0, 8, 5, 3, 3, 2, 2, 2, 2}; int get(int id, int x) { for (int i = 1; i <= 8; i++) { while (x % pr[i] == 0) x /= pr[i], a[id].c[i]++; } return x; } int b[9], sum[N], ans; void dfs(int u) { if (u > 8) { memset(sum, 0, sizeof(sum)); for (int i = 1; i <= n; i++) { int fl = 1; for (int j = 1; j <= 8; j++) { if (b[j] < a[i].c[j]) {fl = 0; break;} } if (!fl) continue; sum[a[i].r] += a[i].v; } int tot = sum[1]; for (int i = 2; i <= 500; i++) { if (sum[i] > 0) tot += sum[i]; } ans = max(ans, tot); return; } for (int i = 0; i <= px[u]; i++) { b[u] = i, dfs(u + 1); } } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d%d", &a[i].m, &a[i].v); a[i].r = get(i, a[i].m); } dfs(1); printf("%d\n", ans); return 0; }


测评信息: