Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33578 林芳菲 【J】序列 C++ 解答错误 0 43 MS 808 KB 1505 2024-10-11 15:13:47

Tests(0/25):


#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; }


测评信息: