标签:21 minn int 工作 job 总费用 搜索 回溯 分配
【题目描述】
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。
输入
第一行有1个正整数n (1≤n≤20)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。
输出
输出最小总费用
样例
【输入】
3 4 2 5 2 3 6 3 4 5
【输出】
9
【参考代码】
#include<bits/stdc++.h>
using namespace std;
int a[21][21];
int n;
int sum,minn=999999;
int b[21];
void f(int k) {
if(k==n+1) {
if(sum<minn)
minn=sum;
return;
}
if(sum>=minn)
return ;
for(int i=1; i<=n; i++) {
if(b[i]==0)
{
b[i]=1;
sum+=a[k][i];
f(k+1);
b[i]=0;
sum-=a[k][i];
}
}
}
int main() {
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
scanf("%d",&a[i][j]);
f(1);
cout<<minn<<endl;
return 0;
}
标签:21,minn,int,工作,job,总费用,搜索,回溯,分配 来源: https://blog.csdn.net/absWC/article/details/122796967
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。