题目
思路
数据量较短,可以枚举。
题目中存在两种决策,且最后答案只取决于数组左边选了多少人,右边选了多少人(根据这个进行枚举)
- 选择可以劝说的人,如何进行决策选择
- 对于无法劝说的人,如何进行选择
这样,我们使用两个for循环来嵌套的枚举所有可能的组合形式,这样答案
∑
i
=
0
k
m
a
x
(
决
策
可
控
制
的
人
)
{
∑
j
=
0
m
−
1
−
i
m
i
n
(
决
策
不
可
控
制
的
人
)
}
\sum_{i=0}^{k}max(决策可控制的人)\left \{ \sum_{j=0}^{m-1-i}min(决策不可控制的人) \right \}
i=0∑kmax(决策可控制的人){j=0∑m−1−imin(决策不可控制的人)}
代码
void solve() {
int t;
cin >> t;
while (t--) {
int n, m, k;
cin >> n >> m >> k;
vector<int> a(n, 0);
for (int i = 0; i < n; i++) cin >> a[i];
int cnt = 0, i = 0, j = n - 1;
int len = min(k, m - 1);
int res = INT_MIN;
for (int left = 0; left <= len;left++){//先选最外层的组合,再选最内层的组合
int right=len-left;
int ans=INT_MAX;
for(int l=0;l<=m-1-len;l++){
int r=m-1-len-l;
ans=min(ans,max(a[l+left],a[n-1-right-r]));
}
res=max(res,ans);
}
cout<<res<<endl;
}
}