2 条题解
-
0
#include <bits/stdc++.h> using namespace std; int n, a[303], f[303][303], ans; bool vis[303][303]; // 取 l 或取 r int dfs(int l, int r) { if (r - l == n+1) return 0; if (vis[l][r]) return f[l][r]; vis[l][r] = true; if (l == r) return f[l][r] = -dfs(l-1, r+1) + a[l]%2; else return f[l][r] = max(-dfs(l-1, r) + a[l]%2, -dfs(l, r+1) + a[r]%2); } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; a[n+i] = a[2*n+i] = a[i]; } for (int i = n+1; i <= 2*n; i++) { memset(vis, 0, sizeof vis); if (dfs(i, i) > 0) ans++; } cout << ans << endl; return 0; }
- 1
信息
- ID
- 9
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 12
- 已通过
- 3
- 上传者