求一个自动分配项目的算法,代码也行。
算法要求:假如有10个老师,每个老师只带规定数量的学生,每个老师提供5个项目,
学生根据自己情况选取项目,在选取时学生最多可选6个,并在每个项目后编号,
1表示最喜欢,2表示喜欢,依次类推。算法根据学生填好的编号顺序分配项目,
但最后每个学生只会被安排一个项目,同时老师所带的学生不能超过规定数量。
算法要求:假如有10个老师,每个老师只带规定数量的学生,每个老师提供5个项目,
学生根据自己情况选取项目,在选取时学生最多可选6个,并在每个项目后编号,
1表示最喜欢,2表示喜欢,依次类推。算法根据学生填好的编号顺序分配项目,
但最后每个学生只会被安排一个项目,同时老师所带的学生不能超过规定数量。
解决方案 »
- 什么叫做异步方法?
- socket编程并连接数据库问题!! 请来看一下,帮帮忙!!
- 如何统计ArrayList中元素出现的次数
- t.f4();调用失败,无法从父类继承获得 为什么?
- 求JAVA中如何将实际问题抽象用JAVA代码来解决?谢谢!
- javac Hello.java时,找不到Hello.java文件
- 怎么没人帮我顶一哈呢?? 最近遇到了三个问题,都贴在我论坛里边,大家到我论坛里边看哈,看谁能帮我解决这三个问题,顺便帮我顶哈!!!!!
- 初始化问题
- 请各位帮个简单问题,JAVA中取得一个汉字或字符的ASC码,是用Asc函数么?怎么用?
- 在Java里怎样获得classpath里的信息
- 菜鸟问题
- javascript 保存cookie 有时候不成功 怎么回事儿,有
我说的只是个例子,题目中任何具体的数字都可用未知的x,y,z表示
我这样说只想把抽象的问题具体一点,如果你很强,每个数字都用未知数代替,
这也是我想要的算法,做做看吧
只需要知道 有50个项目(假设每个项目最大人数为表projectPMax[50] ,有projectList[50] )
假设有n个学生 每个同学有一个 喜爱程度表 n个表 likeList[n]
每个表取一个元素 加入到最喜欢的projectList[Most]中 就将projectPMax[Most] - 1,将这人去除如果满了 就将加入projectList[more]中后面类似
这样就好了 算法为尽可能的满足学生
假设每个老师最多带projectPTea[10]人
如果 projectPTea[n] == SumPeople(projectList[5n] ... projectList[5n+4])就满了
这个题目的算法是最大流,或者最小费用流。如果不知道概念可以先去baidu一下,不一定知道算法,知道问题是什么就可以了。
建一个网络,每个学生看做一个点,每个老师看做一个点,如果这个学生喜欢某个老师的某一个项目,就向这个老师的点连一条边,容量是1,权值前面也说了,题目没有规定,如果有规定,就按照要求加一个差不多的权就可以了。然后一个源点,一个汇点,源点向学生连边,容量1,费用0,老师向汇点连边,容量是老师的学生数,费用0。
这样求出的可行流就是一种答案。
条件是:每个学生都可以分配一个项目,
初步分析:可能出现的情况1,没有一个学生喜欢这个项目,情况2,有2个或多个学生喜欢这个项目,情况3,理想的每个项目只有一个学生。在情况2和1,中递归这个关系:一旦当学生选择项目时候,首先列出未被选中的项目作比较,1最喜欢的,2,喜欢的,。。直到这个学生找到适合的项目,然后把这项目删除,这个是学生的关心的。老师和学生的关系是,比较容易,5个学生跟一个老师,
建议把学生选中的项目一起做成Hashset,
这个是笨方法,请大家看看是不是分析的对,