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());
    }
    
    每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。
  • 相关阅读:
    关于屏幕点亮和熄灭你所需要知道的
    关于handler的使用和理解
    关于Android Task的学习
    Android触摸屏幕事件总结
    Android工作问题总结
    Android生命周期总结
    Android中如何在子线程更新UI
    Eclipse中启动tomcat无效,而手动启动可以访问的原因
    使用Spring进行文件加载进内存
    spring集成quartz定时器的使用
  • 原文地址:https://www.cnblogs.com/spnooyseed/p/12870869.html
Copyright © 2011-2022 走看看