题意:给 思路:对每堆牌的奇偶性进行讨论,如果是偶数,那么显然在双方都选最优策略的情况,这堆牌肯定是所有堆中最好的。那么对手为了不让对方不取完这堆最优的牌,对手肯定也会取这堆牌,那么一直取下去,肯定先手取完上半堆,后手取完下半堆牌,再对奇数讨论,与偶数牌堆类似,除了取最中间的那个牌外,两人还是会取一样的牌数,当取到中间牌时,先手会考虑所有奇数牌堆的中间牌谁最大,如果此时的中间牌堆不是最大的,那么先手会选择让对方取这个牌,转而取另一个奇数牌堆的中间牌,后手的策略同理,但由于后手劣势,每次只能取次优的中间牌。 综上结论就出来。先各取一半,然后对所有中间牌 时间复杂度: AC代码:
E – Fox and Card Game(博弈论&贪心)
n堆牌,两人一个人只能从某一个牌堆的牌顶取,一个只能从牌底取,问各自在最优策略下各自取到牌的总和最大。
sort一下就好了。
O(nlogn)#include<cstdio> #include<vector> #include<algorithm> #include<functional> using namespace std; int main(){ int n,a=0,b=0,num; scanf("%d",&n); vector<int>v; for(int i=1;i<=n;i++) { scanf("%d",&num); int f=num%2,x;num>>=1;//f判断个数为奇数还是偶数. for(int j=0;j<num;j++) scanf("%d",&x),a+=x; if(f) scanf("%d",&x),v.push_back(x); for(int j=0;j<num;j++) scanf("%d",&x),b+=x; } sort(v.begin(),v.end(),greater<int>()); for(int i=0;i<v.size();i++) if(i&1) b+=v[i];//先手优先取. else a+=v[i]; printf("%d %dn",a,b); return 0; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算