2 条题解

  • 0
    @ 2024-9-1 19:07:49

    洛谷P6457

    • 0
      @ 2024-9-1 19:07:06
      #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
      上传者