Problem : 危险的工作
Description
给出一个数字N,N<=11.代表有N个人分担N个危险的工作。
每个人对应每个工作,有个危险值
每个人担任其中一项,问每个人危险值相加,最小值是多少。
Input
第一行给出数字N,接下来N行N列
第i行第j列,代表第i个人担负第j个工作的危险值是多少
Output
如题
Sample Input
3
10 2 3
2 3 4
3 4 5
Sample Output
9
HINT
#include<bits/stdc++.h>
using namespace std;
int n,ans=342344;
int mp[1000][1000];
bool cmp[1000];
void dfs(int cnt,int tot){
if(tot>ans)return;
if(cnt==n)ans=min(ans,tot);
else for(int i=0;i<n;i++){
if(cmp[i]==false){
cmp[i]=1;
dfs(cnt+1,tot+mp[i][cnt]);
cmp[i]=0;
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>mp[i][j];
}
}
dfs(0,0);
cout<<ans;
return 0;
}