工作分配(值得庆祝的一个题)

麻吉我终于自己真正的做出来一道搜索的题!!

开熏qwq

庆祝庆祝!!!!!!

呱唧呱唧!

【问题描述】

      设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij。试设计一个算法,为每一个人都分配一件不同的工作,并使总费用达到最小。

【编程任务】

      设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。

【输入格式】

      由文件job.in给出输入数据。第一行有1个正整数n (1≤n≤20)。接下来的n行,每行n个数,第i行表示第i个人各项工作费用。

【输出格式】

      将计算出的最小总费用输出到文件job.out。

【输入样例】

3
4  2  5
2  3  6
3  4  5

【输出样例】

9

【代码】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<iostream>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<string>
 7 #include<cmath>
 8 
 9 using namespace std;
10 
11 int n,ans,minn=0x7fffffff;//记录最小费用
12 int zj[233][233];
13 bool qwq[886];//判断是否可以工作
14 
15 int search(int);
16 int change();
17 
18 int main() {
19     cin>>n;
20     for(int i=1; i<=n; i++) {
21         for(int j=1; j<=n; j++)
22             cin>>zj[i][j];
23     }
24     search(1);
25     cout<<minn<<endl;
26     return 0;
27 }
28 
29 int search(int x) {
30     for(int j=1; j<=n; j++) {
31         if(!qwq[j]) {
32             qwq[j]=1;
33             ans+=zj[x][j];
34             if(x==n) change();
35             else search(x+1);
36             qwq[j]=0;
37             ans-=zj[x][j];
38         }
39 
40     }
41 }
42 
43 int change() {
44     if(ans<minn) minn=ans;
45 }

 

posted @ 2017-03-24 21:26  夜雨声不烦  阅读(251)  评论(0编辑  收藏  举报