問題描述
設有 nn 件工作分配給 nn 個人。將工作 ii 分配給第 jj 個人所需的費用為 cijcij。試設計一個算法,為每一個人都分配一件不同的工作,並使總費用達到最小。
設計一個算法,對於給定的工作費用,計算最佳工作分配方案,使總費用達到最小。
輸入格式
第一行有 1 個正整數 nn (1≤n≤20)(1≤n≤20)。接下來的 nn 行,每行 nn 個數,第 ii 行表示第 ii 個人各項工作費用。
輸出格式
一行,1 個整數,即最小總費用。
樣例一
input
3 4 2 5 2 3 6 3 4 5
output
9
數據范圍與約定
時間限制: 1s1s
內存限制: 256MB
#include<bits/stdc++.h> using namespace std; int t[31][31]; int ans=0x7fffff; bool gz[30]; int ls=0; void sz(){ ans=min(ans,ls); } void search(int n,int k){ if(k==n+1){ sz(); return ; } for(int i=1;i<=n;i++){ if(!gz[i]){ gz[i]=true; ls+=t[k][i]; if(ls<ans){ search(n,k+1); } ls-=t[k][i]; gz[i]=false; } } } int main(){ int n; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>t[i][j]; search(n,1); cout<<ans<<endl; return 0; }
