zoukankan      html  css  js  c++  java
  • 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
    ");
                printf("%d
    ",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
    ");
        return 0;
    }

    一开始用模拟做的,敲了将近一百多行,发现可以缩短成不到60行QWQ

  • 相关阅读:
    Docker的历史
    IP路由基础
    Docker的基础知识(二)
    Docker的基础知识(一)
    CentOS7下安装部署“zabbix”
    使用amoeba实现mysql读写分离
    ?? 运算符(C# 参考)
    ?? 运算符(C# 参考)
    knockout,change事件
    knockout,change事件
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11030183.html
Copyright © 2011-2022 走看看