Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33578 | 林芳菲 | 【J】序列 | C++ | 解答错误 | 0 | 43 MS | 808 KB | 1505 | 2024-10-11 15:13:47 |
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; int n, g[130][130]; int a[130], c[130]; long long f[750010]; struct node { int d[130]; int cal() { int ans = 0; for (int i = 1; i <= n; i++) ans = ans * (c[i] + 1) + d[i]; return ans; } }; int lcm(int x, int y) { return x / __gcd(x, y) * y; } void work(int l, int r) { for (int i = l; i < r; i++) g[l][r] += lcm(a[i], a[r]) * 2; g[l][r] += a[r]; } long long dfs(node step) { int num = step.cal(); if (num == 0) return 0; if (f[num]) return f[num]; int pos = 0; for (int i = 1; i <= n; i++) pos += step.d[i] * i; for (int i = 1; i <= n; i++) if (step.d[i] && pos >= i) { step.d[i]--; f[num] = max(f[num], dfs(step) + g[pos - i + 1][pos]); step.d[i]++; } return f[num]; } int main() { // freopen("array.in", "r", stdin); // freopen("array.out", "w", stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> c[i]; for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) work(i, j); node st; for (int i = 1; i <= n; i++) st.d[i] = c[i]; cout << dfs(st) << endl; // fclose(stdin); // fclose(stdout); return 0; }