(KM演算法) hdu 2255

來源:互聯網
上載者:User

標籤:

奔小康賺大錢

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4500    Accepted Submission(s): 1938


Problem Description傳說在遙遠的地方有一個非常富裕的村落,有一天,村長決定進行制度改革:重新分配房子。
這可是一件大事,關係到人民的房屋問題啊。村裡共有n間房間,剛好有n家老百姓,考慮到每家都要有房住(如果有老百姓沒房子住的話,容易引起不安定因素),每家必須分配到一間房子且只能得到一間房子。
另一方面,村長和另外的村領導希望得到最大的效益,這樣村裡的機構才會有錢.由於老百姓都比較富裕,他們都能對每一間房子在他們的經濟範圍內出一定的價格,比如有3間房子,一家老百姓可以對第一間出10萬,對第2間出2萬,對第3間出20萬.(當然是在他們的經濟範圍內).現在這個問題就是村領導怎樣分配房子才能使收入最大.(村民即使有錢購買一間房子但不一定能買到,要看村領導分配的). 

 

Input輸入資料包含多組測試案例,每組資料的第一行輸入n,表示房子的數量(也是老百姓家的數量),接下來有n行,每行n個數表示第i個村名對第j間房出的價格(n<=300)。 

 

Output請對每組資料輸出最大的收入值,每組的輸出佔一行。

 

 

Sample Input2100 1015 23 

 

Sample Output123 

 

SourceHDOJ 2008 Summer Exercise(4)- Buffet Dinner 

 

Recommendlcy   |   We have carefully selected several similar problems for you:  1068 3360 1083 2444 1533  
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cstdlib>#include<cmath>#include<algorithm>#include<queue>#include<vector>#include<stack>using namespace std;#define INF 1<<30int n,nx,ny;int link[310],lx[310],ly[310],slack[310],w[310][310],visx[310],visy[310];bool dfs(int x){    visx[x]=1;    for(int y=1;y<=ny;y++)    {        if(visy[y])            continue;        int t=lx[x]+ly[y]-w[x][y];        if(t==0)        {            visy[y]=1;            if(link[y]==-1||dfs(link[y]))            {                link[y]=x;                return 1;            }        }        else if(slack[y]>t)                slack[y]=t;    }    return 0;}int km(){    memset(link,-1,sizeof(link));    memset(ly,0,sizeof(ly));    for(int i=1;i<=nx;i++)    {        lx[i]=-INF;        for(int j=1;j<=ny;j++)            lx[i]=max(lx[i],w[i][j]);    }    for(int x=1;x<=nx;x++)    {        for(int i=1;i<=ny;i++)            slack[i]=INF;        while(1)        {            memset(visx,0,sizeof(visx));            memset(visy,0,sizeof(visy));            if(dfs(x))                break;            int d=INF;            for(int i=1;i<=ny;i++)            {                if(!visy[i]&&d>slack[i])                    d=slack[i];            }            for(int i=1;i<=nx;i++)            {                if(visx[i])                    lx[i]-=d;            }            for(int i=1;i<=ny;i++)            {                if(visy[i])                    ly[i]+=d;                else                    slack[i]-=d;            }        }    }    int res=0;    for(int i=1;i<=ny;i++)        if(link[i]!=-1)            res+=w[link[i]][i];    return res;}int main(){    while(scanf("%d",&n)!=EOF)    {        nx=ny=n;        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)                scanf("%d",&w[i][j]);        }        int ans=km();        printf("%d\n",ans);    }    return 0;}

  

(KM演算法) hdu 2255

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.