工作分配問題【回溯法】


問題描述

設有 nn 件工作分配給 nn 個人。將工作 ii 分配給第 jj 個人所需的費用為 cijcij。試設計一個算法,為每一個人都分配一件不同的工作,並使總費用達到最小。

設計一個算法,對於給定的工作費用,計算最佳工作分配方案,使總費用達到最小。

輸入格式

第一行有 1 個正整數 nn (1n20)(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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM