CD91 排成一条线的纸牌博弈问题
作者:互联网
题目
- 考查点:区间DP 博弈
- 题目:排成一条线的纸牌博弈问题
- 思路:两个数组,
f
表示先手的最大值s
表示后手的最大值,最后求两个值的最大值。详情参考左程云的面试指南书籍。
代码
- 时间复杂度 O ( n 2 ) O(n^2) O(n2)
#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int a[N], f[N][N], s[N][N];
int main(){
int n;
cin>>n;
for(int i = 1; i <= n; i++) cin>>a[i];
for(int len = 1; len <= n; len++){
for(int i = 1; i + len - 1 <= n; i++){
int j = i + len - 1;
f[i][j] = max(a[i] + s[i+1][j], a[j] + s[i][j-1]);
s[i][j] = min(f[i+1][j], f[i][j-1]);
}
}
cout<<max(f[1][n], s[1][n])<<endl;
}
标签:博弈,纸牌,int,最大值,len,CD91,一条线 来源: https://blog.csdn.net/SYaoJun/article/details/120603204