麻吉我终于自己真正的做出来一道搜索的题!!
开熏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 }