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 三国游戏的主要内容,如果未能解决你的问题,请参考以下文章

P1199 三国游戏

P1199 三国游戏

P1199 三国游戏

P1199 [NOIP2010 普及组] 三国游戏

洛谷P1199 三国游戏

洛谷P1199 三国游戏 博弈论 数学