zoukankan      html  css  js  c++  java
  • J.Spy

    Over time, those coaches in BDN Collegiate Progranuning Contest split into two camps.The big danger is that, while optimists and pessimists battle it out, the environment of this area becomes ever more divided between universities with outstanding student resources surrounded by a vast neglected group of stagnation.

    Amy and Bob, as the linchpins of these two camps respectively, decided to put the end to the rival. Now both camps hold nn coders and nn tea-bringers as the last resource on hand. They will form teams in pair that each team should consist of a coder and a tea-bringer. The power of a team is regarded as the sum of powers of both members.

    Now Bob hired a spy and has got some information about the plan of his rival: the power of each team which will present for the enemy camp, and the corresponding unit of reputations that Bob would gain after beating this team. Naturally, he hopes to make the best arrangement of teams in his camp for more reputations.

    These two camps will have a collision soon, and their teams will fight one on one in random order. That is, we may have n!n! different situations appearing in this collision. A team would triumphantly return if it has a higher power. When two teams of the same power meet, the one led by Amy would beat the rival by a neck.

    Can you calculate the maximum expected unit of reputations that Bob will gain? To make the answer be an integer, you are asked to multiply the answer by nn and we guarantee that the expected number multiplied by nn should always be an integer.

    在这里插入图片描述
    在这里插入图片描述
    KM算法模板 bfs优化时间复杂度真正的O^3

    
    #include <iostream>
    #include<stdio.h>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #include<cstring>
    #define ll long long
    using namespace std;
    #define maxn 605
    #define INF 0x3f3f3f3f
    ll n, a[maxn],b[maxn],c[maxn],p[maxn];
    ll w[maxn][maxn];
    ll lx[maxn] , ly[maxn];
    ll linker[maxn];
    ll slack[maxn];
    bool visy[maxn];
    ll pre[maxn];
    void bfs( ll k ){
        ll x , y = 0 , yy = 0 , delta;
        memset( pre , 0 , sizeof(pre) );
        for( ll i = 1 ; i <= n ; i++ ) slack[i] = INF;
        linker[y] = k;
        while(1){
            x = linker[y]; delta = INF; visy[y] = true;
            for( ll i = 1 ; i <= n ;i++ ){
                if( !visy[i] ){
                    if( slack[i] > lx[x] + ly[i] - w[x][i] ){
                        slack[i] = lx[x] + ly[i] - w[x][i];
                        pre[i] = y;
                    }
                    if( slack[i] < delta ) delta = slack[i] , yy = i ;
                }
            }
            for( ll i = 0 ; i <= n ; i++ ){
                if( visy[i] ) lx[linker[i]] -= delta , ly[i] += delta;
                else slack[i] -= delta;
            }
            y = yy ;
            if( linker[y] == -1 ) break;
        }
        while( y ) linker[y] = linker[pre[y]] , y = pre[y];
    }
     
    ll KM(){
        memset( lx , 0 ,sizeof(lx) );
        memset( ly , 0 ,sizeof(ly) );
        memset( linker , -1, sizeof(linker) );
        for( ll i = 1 ; i <= n ; i++ ){
            memset( visy , false , sizeof(visy) );
            bfs(i);
        }
        ll res = 0 ;
            for( ll i = 1 ; i <= n ; i++ ){
                if( linker[i] != -1 ){
                    res += w[linker[i]][i] ;
                }
            }
            return res;
    }
     
    int main()
    {
        scanf("%lld",&n);
        for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
        for(ll i=1;i<=n;i++) scanf("%lld",&p[i]);
        for(ll i=1;i<=n;i++) scanf("%lld",&b[i]);
        for(ll i=1;i<=n;i++) scanf("%lld",&c[i]);
        for(ll i=1;i<=n;i++)
        {
            for(ll j=1;j<=n;j++)
            {
                ll s=0;
                for(ll k=1;k<=n;k++)
                {
                    if(b[i]+c[j]>a[k]) s+=p[k];
                }
                w[i][j]=s;
            }
        }
        printf("%lld
    ",KM());
    }
    
    每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。
  • 相关阅读:
    Expression Blend4经验分享:自适应布局浅析
    Expression Blend4经验分享:制作一个简单的图片按钮样式
    Expression Blend4经验分享:制作一个简单的文字按钮样式
    24.Unity手势操作(转自宣雨松博客)一
    1.关于Unity -Vuforia -Android 开发 ,平台的搭建(极品菜鸟完整版)
    26. Kinect + Unity 体感及增强现实开发历程一
    25.Unity3D手机中Input类touch详解-Unity触屏事件解析到底(Twisted Fate)
    23.Unity+Metaio SDK 开发笔记
    徐CC , Unity +C# 自学笔记2
    unity3d中的http通信
  • 原文地址:https://www.cnblogs.com/spnooyseed/p/12870869.html
Copyright © 2011-2022 走看看