日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu2853Assignment kM算法

發布時間:2024/3/26 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu2853Assignment kM算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//n個人,匹配m個任務,每個人完成每個任務的效率不同 //剛開始已經有了匹配方案,現在重新設計匹配方案,使得效率最高,且盡量保存 //原來的匹配方案, //將所有權值*1000, 然后對于原來匹配的邊的權值+1,用KM算法求出最大帶權匹配ans //那么最終的最大效率為ans/1000 , 保留原來的匹配邊的個數為ans%mod #include<iostream> #include<cstdio> #include<cstring> using namespace std ; const int maxn = 60 ; const int mod = 1000 ; const int inf = 0x3f3f3f3f ; int match[maxn] , lx[maxn] , ly[maxn] , slack[maxn] ; int w[maxn][maxn] , visx[maxn] , visy[maxn] ; int n , m ; bool find(int x) {visx[x] = 1 ;for(int i = 1;i <= m;i++){if(visy[i])continue ;int tmp = lx[x] + ly[i] - w[x][i] ;if(tmp == 0){visy[i] = 1 ;if(match[i] == -1 || find(match[i])){match[i] = x ;return true ;}}else slack[i] = min(slack[i] , tmp) ;}return false ; } int KM() {memset(match , -1 ,sizeof(match)) ;memset(ly , 0 , sizeof(ly)) ;for(int i = 1;i <= n;i++){lx[i] = -inf ;for(int j = 1;j <= m;j++)lx[i] = max(lx[i] , w[i][j]) ;}for(int i = 1;i <= n;i++){for(int j = 1;j <= m;j++)slack[j] = inf ;while(1){memset(visx , 0 , sizeof(visx)) ;memset(visy , 0 , sizeof(visy)) ;if(find(i))break;int d = inf ;for(int j = 1;j <= m;j++)if(!visy[j])d = min(d , slack[j]) ;for(int j = 1;j <= n;j++)if(visx[j])lx[j] -= d ;for(int j = 1;j <= m;j++)if(visy[j])ly[j] += d ;elseslack[j] -= d ;}}int ans = 0 ;for(int i = 1;i <= m;i++)if(match[i] != -1)ans += w[match[i]][i] ;return ans ; }int main() {//freopen("in.txt" , "r" , stdin) ;while(~scanf("%d%d" ,&n , &m)){for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++){scanf("%d" , &w[i][j]) ;w[i][j] *= mod ;}int sum = 0 ;for(int i = 1;i <= n;i++){int a ;scanf("%d" , &a) ;sum += w[i][a]/mod ;w[i][a]++ ;}int ans = KM() ;printf("%d %d\n" , n - ans%mod , ans/mod - sum) ;}return 0 ; }

總結

以上是生活随笔為你收集整理的hdu2853Assignment kM算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。