问题大意:你和你的n-1的朋友在a[1]~a[n]中选择数字,每个人只能选择第一个或者最后一个数字,你排在第m位,你可以操控k个人让他们选择第一个或者最后一个数字,而其他人你无法操控,你会在选择中选最大的数字,求最优操纵情况下,你最小能取到多大的数字
思路:暴力,题目数据较小,直接暴力模拟每一种情况,取最优解
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int num[3535];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,k;
memset(num,0,sizeof(num));
scanf("%d %d %d",&n,&m,&k);
k=min(k,m-1);//你最多只能操纵m-1个人
for(int i = 1;i <= n;i++){
scanf("%d",&num[i]);
}
int begin,end,ans=0,tmp;
for(int i = 1;i <= k+1;i++){//模拟操纵情况
begin=i;
end=n-k+i-1;
tmp=1e9;
for(int l = begin,r=end-(m-k-1);l <= begin+m-k-1;l++,r++){//模拟随机选择情况
int temp=max(num[l],num[r]);
tmp=min(temp,tmp);//求至少能取多大
}
ans=max(ans,tmp);//取最优解
}
printf("%d\n",ans);
}
}