Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
34637 | byxx2023 | 【搜索与回溯】分工问题(例题) | C++ | 无测评数据 | 0 MS | 0 KB | 1236 | 2023-12-23 17:50:48 |
#include<bits/stdc++.h> using namespace std; int xiaolv[6][6]={{0,0,0,0,0,0}, //初始化每人工作不同种类的工作效益 {0,13,11,10,4,7}, {0,13,10,10,8,5}, {0,5,9,7,7,4}, {0,15,12,10,11,5}, {0,10,11,8,8,4}}; bool c[25];//存储同种工作是否被占 int a[25];//存储每人的工作种类 int b[25];//存储打擂台后的最大效益的每人的工作种类 int n=5,maxv;//maxv存储最大效益的值 void print()//输出 { printf("A:J%d\n",b[1]); printf("B:J%d\n",b[2]); printf("C:J%d\n",b[3]); printf("D:J%d\n",b[4]); printf("E:J%d\n",b[5]); printf("supply:%d",maxv); } void fun(int k,int v) { for(int i=1;i<=n;i++) { if(c[i]==false) { a[k]=i;//给a数组工作种类 c[i]=true;//标记 v+=xiaolv[k][i]; if(v>maxv)//打擂台,将大的最佳效益值赋值给maxv { maxv=v; for(int i=1;i<=n;i++) { b[i]=a[i];//将大的最佳效益值的工作种类赋值给b数组 } } fun(k+1,v);//再进行深搜 c[i]=false;//取消标记 v-=xiaolv[k][i];//取消工作效率 } } } int main() { fun(1,0); print(); return 0; }