zoukankan      html  css  js  c++  java
  • 博弈论

    1.三国游戏(完全信息静态博弈)

    代码:

    #include <stdio.h>
    #include <memory.h>
    #include <math.h>
    #include <string>
    #include <vector>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <map>
    
    
    #define I scanf
    #define OL puts
    #define O printf
    #define F(a,b,c) for(a=b;a<c;a++)
    #define FF(a,b) for(a=0;a<b;a++)
    #define FG(a,b) for(a=b-1;a>=0;a--)
    #define LEN 1000
    #define MAX 1<<30
    #define V vector<int>
    
    using namespace std;
    
    int a[LEN][LEN];
    
    int main(){
    //    freopen("D:\CbWorkspace\博弈论\三国游戏.txt","r",stdin);
        int i,j,n;
        I("%d",&n);
        for(i=1;i<=n;i++){
            a[i][i]=-1;
            for(j=i+1;j<=n;j++){
                I("%d",&a[i][j]);
                a[j][i]=a[i][j];
            }
        }
        //对于每一个英雄,进行排序
        for(i=1;i<=n;i++) sort(a[i]+1,a[i]+1+n);
        //在第二小的value中寻找
        int ans=-1;
        for(i=1;i<=n;i++) ans=max(ans,a[i][n-1]);
        printf("%d
    %d
    ",1,ans);
        i=0;
        return 0;
    }
    View Code

    排序前:

    排序后:

    (排序取第n-1最大值的目的:拿到最大的次大值)

    理解:

    每个武将对应的所有配对值中最大的值,已经被拆散在这种情况下,场上存在的只剩所有的“次大值”,就是我们拿来排序的那一堆。

    这时候小涵拿到了“次大值”中的最大值,肯定是场上最高的分数

    1.从武将中找出武将,记下与i的默契值第二大的武将使得i与j的默契值最大(在第二大的列里面最大。这就是排序取n-1的意义)
    2.小涵选出,那么计算机只会选出与i默契值最大的武将

    此时与p的默契值最大值一定是i。

    因此,我们第一次选了i,取得了次大值中的最大值同时拆掉了i的最大值和p的最大值


  • 相关阅读:
    最简单的UDP程序
    最简单的TCP程序
    一道面试题的分析
    JDK5新特性:可变参数方法
    文件IO流总结
    集合使用的总结
    双列集合Map的嵌套遍历
    集合HashSet的使用
    集合TreeSet的使用
    用LinkedList模拟Stack功能
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8446496.html
Copyright © 2011-2022 走看看