P1199 三国游戏
Posted xiaoyezi-wink
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1199 三国游戏相关的知识,希望对你有一定的参考价值。
P1199 三国游戏
题解
这是一道贪心题
分析一下
每个默契值关系到两个武士
小涵先选武士,为了保证最大默契值
肯定是会找到一个默契值最大的数字,选择其中这两个武士当中的一个
那么无论是选哪一个,下一个轮到机器选,一定会把另一个武士选中,组织小涵胜利
显然最大默契值一定不会成为本题答案
考虑次大默契值
我们在考虑最大默契值的时候,小涵一定确定了一个武士,如果次大默契值与最大默契值同行或者同列,那么小涵下一步选择它,就构成了最优答案,输出即可
我们继续寻找下一个大的默契值
代码
#include<bits/stdc++.h> using namespace std; int cnt,n,mp; bool vis[1000010]; struct node int x; int y; int w; jiang[1000010]; bool cmp(node x,node y) return x.w >y.w ; int main() scanf("%d",&n); cnt=0; for(int i=1;i<=n-1;i++) for(int j=i+1;j<=n;j++) scanf("%d",&mp); jiang[++cnt].w =mp; jiang[cnt].x =i; jiang[cnt].y =j; sort(jiang+1,jiang+cnt+1,cmp); int flag=0; vis[jiang[1].x ]=1; vis[jiang[1].y ]=1; for(int i=2;i<=cnt;i++) if(vis[jiang[i].x] ||vis[jiang[i].y ]) printf("1\n"); printf("%d\n",jiang[i].w ); return 0; else if(!vis[jiang[i].x] ) vis[jiang[i].x]=1; if(!vis[jiang[i].y] ) vis[jiang[i].y]=1; printf("0\n"); return 0;
一开始用模拟做的,敲了将近一百多行,发现可以缩短成不到60行QWQ
以上是关于P1199 三国游戏的主要内容,如果未能解决你的问题,请参考以下文章