題目鏈接:http://codeforces.com/contest/1291/problem/C
思路:
我們可以很容易想到,只有前m-1個人才能影響m的選擇的大小,后面的人無法影響,
如果所有人都無法控制,那么選數情況的不可控性很大,于是如果我們可以控制k個人,讓他們的選擇被我們控制,
那么,可控性隨之上升,我們知道,只有前m-1個人能影響m的選擇,于是,我們應該盡可能多的控制前m-1個人,
于是,我們可以控制的人數應該是x=min(k,m-1),如果x = m-1,說明m前面的所有人都可以控制,那就是可控的情況了,
我們就可以列舉x個人的選擇情況,比如有3個人選了前3個數,那么x-3個人選了后x-3個數,ansi = max(a[4],a[n-(x-3)]),
最后的答案應該是end_ans = max(end_ans,ans1,ans2...ansm-1)一個for回圈就可以搞定,
如果x < m-1,及有y = m-1-k個人的選擇不確定,說明有了隨機性,那么我就在上面可以確定的情況中列舉所有的隨機選擇,
對于隨機情況我們需要選擇最小值,因為ans要求的是任何情況的ans至少是多少,
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int main(){ 6 7 int a[4000]; 8 int n,m,k,p,T; 9 cin >> T; 10 while(T--){ 11 cin >> n >> m >> k; 12 for(int i = 1; i <= n; ++i) cin >> a[i]; 13 k = min(k,m-1);//可控制的人數 14 p = max(m-1-k,0);//不可控制的人數 15 int ans = -1; 16 for(int i = 0; i <= k; ++i){//i個人選前面的數,可控制的人 17 int tmp_ans = (int)1e9+10; 18 for(int j = 0; j <= p; ++j){//j個人選前面的數,不可控制的人 19 tmp_ans = min(tmp_ans,max(a[i+j+1],a[n-(k-i)-(p-j)])); 20 } 21 ans = max(ans,tmp_ans); 22 } 23 cout << ans << endl; 24 } 25 26 return 0; 27 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/95253.html
標籤:其他
上一篇:唯一分解定理
下一篇:求約數個數(模板)
