设有A,B,C,D,E五人从事J1,J2,J3,J4,J5五项工作,每人只能从事一项,他们的效益如下。

每人选择五项工作中的一项,在各种选择的组合中,找到效益最高的的一种组合输出。

这个主要是细节了,没什么难度

 1 #include<stdio.h>
 2 int MansToJobs[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}};
 3 //以上,前一维代表人名,后一维代表工作量
 4 int TheBestResultOfDistribution[6]={0}; //选择时的临时储存
 5 int BossWantIt[6]={0}; //最优解的储存   和上面都是下标代表工作序号,内容代表工作者
 6 int BestRecord=0,NowadayRecord=0;  //工作总量储存:BestRecord是最优解的储存,NowadayRecord是临时储存
 7 int search(int n)    //第几个人
 8 {
 9     int i,j;
10     for(i=1;i<=5;i++) //第几个工作
11     {
12         if(TheBestResultOfDistribution[i]==0) //如果此工作没人干
13         {
14             TheBestResultOfDistribution[i]=n; //交给此人
15             NowadayRecord+=MansToJobs[n][i]; //记录工作总情况
16             if(n==5)   //如果已经有了5个选择
17             {
18                 if(NowadayRecord>BestRecord)   //又如果这一次的总工作量大于上一次记录的最多的
19                 {
20                     BestRecord=NowadayRecord; //替代一下
21                     for(j=1;j<=5;j++)
22                         BossWantIt[j]=TheBestResultOfDistribution[j];
23                 }
24             }
25             else search(n+1);
26             TheBestResultOfDistribution[i]=0; //恢复现场,这一步别的框架可能不需要,但这个需要
27             NowadayRecord-=MansToJobs[n][i];
28         }
29     }
30
31 }
32 int main()
33 {
34     int i;
35     search(1);
36     for(i=1;i<=5;i++) //输出没什么好说的了
37         printf("The job:%d give the guy:%d\n",i,BossWantIt[i]);
38     printf("total:%d",BestRecord);
39     return 0;
40 }

同类题目选书

学校放寒假时,信息学竞赛辅导老师有A,B,C,D,E五本书,要分给参加培训的张、王、刘、孙、李五位同学,每人只能选一本书。老师事先让每个人将自己喜欢的书填写在如下的表格中。然后根据他们填写的表来分配书本,希望设计一个程序帮助老师求出所有可能的分配方案,使每个学生都满意。

 1 #include <stdio.h>
 2 int BookTheyLike[6][6]={{0,0,0,0,0,0},{0,1,0,0,1,0},{0,1,1,0,0,1},{0,0,1,1,0,0},{0,0,0,0,1,0},{0,0,1,0,0,1}};
 3 int Method[6]={0},ThisIsMyBook[6]={0};
 4 int AreTheyAllLikeIt=0;
 5 void output()
 6 {
 7     printf("method:");
 8     int k;
 9     for(k=1;k<=5;k++)
10         printf("%d",Method[k]);
11     printf("\n");
12 }
13 void search(int n)
14 {
15     int i;
16     for(i=1;i<=5;i++)
17     {
18         if(BookTheyLike[n][i]==1)//因为如果不喜欢此本书的话这个解就没有意义了,所以可以先检测一下此书是否喜欢再往下搜索
19         {
20             if(ThisIsMyBook[i]==0)
21             {
22                 Method[n]=i;
23                 ThisIsMyBook[i]=1;
24                 AreTheyAllLikeIt+=BookTheyLike[n][i];
25                 if(AreTheyAllLikeIt==5) output();
26                 else search(n+1);
27                 ThisIsMyBook[i]=0;
28                 AreTheyAllLikeIt-=BookTheyLike[n][i];
29             }
30         }
31     }
32 }
33 int main()
34 {
35     search(1);
36     return 0;
37 }

代码和上面的原理差不多,只是多了注释那里,可以省点时间

转载于:https://www.cnblogs.com/KakagouLT/p/4517838.html

Ka的回溯编程练习 Part4|分配工作与选书相关推荐

  1. Ka的回溯编程练习 Part1|整划什么的。。

    1 #include<stdio.h> 2 int search(int s,int t); 3 void op(int k); 4 int res[1001]={1},n; 5 int ...

  2. Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

    1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s== ...

  3. 你是怎样给下属分配工作

    身居管理者位置并不一定会自然产生正确分配工作给别人的能力.事实上,许多管理者常常是非常拙劣的分配者. 现代管理者的一个非常重要的职责就是要把工作分配给别人去做.怎样做到有效的分配呢?美国作者J·W·李 ...

  4. linnux 流量控制模块tc_可编程控制器PLC基本工作原理(第一颗)

    可编程控制器PLC基本工作原理(第一课) 1.硬件结构 2.内部组成(点击关注第二颗) 3.循环扫描 一.中央处理器 1.中央处理器是什么玩意? 中央处理器也称为CPU(Central Process ...

  5. web安全编程——权限的分配和控制

    web安全编程--权限的分配和控制 2009-07-02 15:46 通常权限划分是为了控制数据和功能的使用范围.传统的划分方法一般将用户划分为匿名用户.普通登录用户.管理员用户.我们暂时将以上三 种 ...

  6. 某公司为本科以上学历的人重新分配工作,分配原则如下。 (1)如果年龄不满18岁,学历是本科,男性要求报考研究生,女性则担任行政工作; (2)如果年龄满18岁不满5o 岁,学历本科,不分男女,任中层领导

    软件测试--决策表 10.某公司为本科以上学历的人重新分配工作,分配原则如下. (1)如果年龄不满18岁,学历是本科,男性要求报考研究生,女性则担任行政工作; (2)如果年龄满18岁不满5o 岁,学历 ...

  7. 学编程能做什么工作 五大行业任你选

    在平时跟小伙伴们的交流中,大家问的比较多的一个问题就是:学了编程能干什么? 学泥瓦工可以码砖头.学裁缝能做衣服,这个都有明确的方向.那我们学编程能从事那些工作呢?码农?岂止是码农!而且大家太小看码农了 ...

  8. L1-030 一帮一 (15分) “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生

    L1-030 一帮一 (15分) "一帮一学习小组"是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.本题就请你编写程序帮助老师自动完成这个分配工 ...

  9. “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,

    "一帮一学习小组"是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当 ...

  10. 分配工作时需要考虑的问题

    文章试图总结作为一个技术管理者给下属进行工作分配时,需要从哪些方面考虑,以及需要注意的问题.实际上,也可以作为一个下属如何完成上级分配工作的一个指引.就像文章里说到的,我们在分配给别人任务的时候,别人 ...

最新文章

  1. 一起学微软Power BI系列-使用技巧(3)Power BI安卓手机版安装与体验
  2. python好吗-Python现在就业前景好吗?
  3. learn python the hard way习题31~40总结以及列表的扩展知识
  4. 机械工业出版社之道格·赫尔曼《Python 3标准库》目录
  5. sql 转html 中文乱码问题,SqlServer中文乱码问题的解决方法
  6. POJ2942-Knights of the Round Table【tarjan】
  7. c语言 linker error,[Linker error] undefined reference to `prinf'的问题!
  8. python3 unicodeencodeerror_解决 Python3 下 print 时出现 UnicodeEncodeError 的问题
  9. webpack4升级指南
  10. Django学习笔记5-url
  11. oracle之 监听器无法启动的几个原因总结
  12. 深入 AI 之前,你需要学习的服务与框架
  13. 会员数据化运营应用场景与分析模型
  14. 增大图片(在图像分割、GAN、超分辨中经常用到)
  15. 依图科技(北京)计算机视觉算法实习生面经-2020年10月
  16. eclipse中的servers不见了解决方法
  17. Loki告警的正确姿势
  18. 【DFT】DFT入门介绍
  19. Ubuntu安装Elasticsearch集群及Kibana
  20. vfp报表纸张设置_vfp9终结一直以来的打印纸张设置

热门文章

  1. 【LeetCode】【字符串】题号:*423. 从英文中重建数字
  2. 【xpath】多个xpath Element对象,提取结果是一样的
  3. 《机器学习Python实践》第5章——数据导入
  4. [转载]stl之string类用法详细总结
  5. 机器学习第六回(完结篇)
  6. Android GC机制介绍
  7. Solr服务器搭建与简单使用
  8. Apache Flink Meetup · 北京站,1.13 新版本 x 互娱实践分享的开发者盛筵!
  9. 帧同步分离逻辑层和渲染层_帧同步如何分离逻辑和渲染?
  10. c语言程序设计教程 郭浩志,C语言程序设计教程答案杨路明郭浩志.doc