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());
    }
    
    每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。
  • 相关阅读:
    【转发】淘宝下单高并发解决方案
    ImageLoader的使用
    学习写接口回调
    EventBus的使用
    ListView显示多种类型的item
    GridView规则显示图片
    ViewPager滑动标签-PagerSlidingTabStrip的使用
    Json解析要点
    LISTVIEW嵌套GRIDVIEW的一些处理(点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置)(对这篇文章的优化处理,不每次都new onItemClickListener)
    SVN分支的创建,合并,与销毁和相关操作
  • 原文地址:https://www.cnblogs.com/spnooyseed/p/12870869.html
Copyright © 2011-2022 走看看