求个最优解算法

kissoday 2019-10-16 11:45:47
今天遇到一个问题,困扰了好久
特来此求助各路大神,望大家帮忙。

问题描述:有x本书,每本书y页,n个人来抄写这些书
其中x,y,n都是可变条件


写一个算法,尽量公平的分配工作,让每个人抄的页数尽量相同

规则:
不论单本书多大,也只能由一个人抄写。
x=n的情况,不考虑
x<n的情况也不考虑
...全文
447 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2019-10-17
  • 打赏
  • 举报
回复
抽象一下就是把长度为x的数组聚合成长度为n的数组,并使其标准差最小吧。 对于数组x,每次取标准差正负最大的两个放到一起,直到长度为n。 挺简单的不写了,就是不知道是不是最优。
逗泥丸的平方 2019-10-17
  • 打赏
  • 举报
回复
不知道是怎样评价结果,是不是要求一定最优.
最简单的思路肯定是不管X 对Y排序,用sum(y)/n 表示每个人工作的基准,然后贪婪挨个往n里面插就好了

要不然笨办法就是动态规划,反正我的确是懒得写.
如果可能的话,会不会有基于x的优化,这个也是难以确定的.
逗泥丸的平方 2019-10-17
  • 打赏
  • 举报
回复
背包问题

代码就算了 我也是现用现抄
qybao 2019-10-16
  • 打赏
  • 举报
回复
每本书y页应该y不同吧?
如果y相同,又没有两个人以上合抄一本书,那就是x/n均分,然后x%n随意均分给m个人(m<n)
如果y不同,可以参考背包问题
hurtCat 2019-10-16
  • 打赏
  • 举报
回复
引用 4 楼 hurtCat的回复:
我有个想法 假设有n个人,x本书,默认(n<x) 数据结构:首先把每本书的页数保存在一个数组中,然后数组对排序,结果放入双向链表中。再用一个长度为n的数组表示每个人 算法:从链表前面取出0~n-1本,分给0~n-1号人,然后从链表后面取出n-1~0本,再分给0~n-1号人,依次类推
不用看我的了,我这不能最优
天行归来 2019-10-16
  • 打赏
  • 举报
回复
说说我的想法: 1、x本书,每本书y页,总页数是 x * y 2、n个人抄写,平均每个人抄写 (x * y) / n 页 3、从 剩下(初始值=n)书抽取 若干本,接近 (x * y) / n 页的组合分配给一个抄写者,剩下重新计算剩下页数,直到分配结束
hurtCat 2019-10-16
  • 打赏
  • 举报
回复
我有个想法 假设有n个人,x本书,默认(n<x) 数据结构:首先把每本书的页数保存在一个数组中,然后数组对排序,结果放入双向链表中。再用一个长度为n的数组表示每个人 算法:从链表前面取出0~n-1本,分给0~n-1号人,然后从链表后面取出n-1~0本,再分给0~n-1号人,依次类推
kissoday 2019-10-16
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
每本书y页应该y不同吧? 如果y相同,又没有两个人以上合抄一本书,那就是x/n均分,然后x%n随意均分给m个人(m<n) 如果y不同,可以参考背包问题
嗯。。每本书的y值是不同的
kissoday 2019-10-16
  • 打赏
  • 举报
回复
这个有这么难吗? 都没人来解。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧