一个头疼的算法问题

simahao 2011-10-17 05:07:01
比如说有三个组分别是a,b,c;a组有成员A,B;b组有成员B,C;c组有成员C,A;有点递归的感觉哈。

A,B,C可以理解为成员,他们具有一定数量的产品,分别对应一些具体的数目。
a,b,c做为组,其中是可以有任何多个成员的,但是组有一个限制,就是组内成员持有的数目总和不能超过一定数量,比如说a组最大为100,b组最大为200,c组最大为300

如果A,B,C这三个成员持有的数量造成各自的组超过了这个限制,那么就需要对组进行强制的降低数量,那么降低的原则就是让组内成员持有的数量减少自己持有的数量。

举个例子,比如说a组最大持有数量为100,A持有数量为60,B持有数量为80,那么A+B=140>100,需要强制减少40,那么这40既可以让A减少,也可以让B减少,但是不管谁减少,都会牵扯到b组和c组,感觉就是牵一发而动全身的问题。

不知道大家有没有好的思路。
...全文
551 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy260110962 2011-10-29
  • 打赏
  • 举报
回复
题目长,看到眼花 帮不了你
白米若雪 2011-10-28
  • 打赏
  • 举报
回复
实际上是求一个不等式组
A+B+C<=100
B+C<=200
C<=300
这是线性归划。看看算法导论里就有算法。
帖子不能编辑 2011-10-25
  • 打赏
  • 举报
回复
题目太长了,没耐心看完,帮不了你
mydear_33000 2011-10-23
  • 打赏
  • 举报
回复
这个问题可以用一个全局寻优的方案来解决
全局寻优的具体算法可以自己去查(最大能量法,模拟遗传,蒙特卡罗等)
zoyation 2011-10-20
  • 打赏
  • 举报
回复
暂时,理解了题目
组固定了的,a,b,c……,人固定了的,x,y,z
每个人都加入了两个明确的组,每个人都有一定的money
每个组的人的money总数,不能超过限度(每个组的财产总数)
1,给x,y,z,分配财产
2,超限判断
3,超限处理(一个人的财产变了可能导致三个组的都要变),
interlc 2011-10-20
  • 打赏
  • 举报
回复
没理解什么意思
csdn网速很慢 2011-10-19
  • 打赏
  • 举报
回复
这个题一不小心会让大脑进入死循环的,还是小心点不想为好。
欢乐的小猪 2011-10-19
  • 打赏
  • 举报
回复

同意15L,楼主应该先通过算法求出各个成员的度(或者对楼主来说度是已知的)。减少的话减少度最小的,这样对整体影响最小。

[Quote=引用 15 楼 newwst 的回复:]

引用 9 楼 newwst 的回复:
和人讨论了一下这个问题,是图论的。想通了就很简单。呵呵,好好想想。


按照我们几个(讨论小组。。。)的理解,如果对问题的理解没错的话,解法可能如下。

问题理解:若干人,划分为若干组。每组都有资源上限,如果多了就要减少。但是资源是从属于人的,必须通过减少具体人的资源,这样这个人会不高兴。同时,由于他不仅参加了一个组,所以会导致和他一个组的其他人……
[/Quote]
chhch11111 2011-10-18
  • 打赏
  • 举报
回复
尽量减少同时出现在多个超限小组中的人的产品数量应该就是最优的。
ccnunlp 2011-10-18
  • 打赏
  • 举报
回复
首先,令SUM = A+B+C,sum = a+b+c,
1)若2SUM>sum,则总共需要减掉dsum = 2SUM - sum,然后令a需要减掉da,b需要减掉db,c需要减掉dc,则:
da + db + dc = dsum;
A - da + B - db = a,
B - db + c - dc = b
C - dc + A - da = c,线性方程组。
2)若2SUM < sum,同上令da,db,dc就简单了
newwst 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 newwst 的回复:]
和人讨论了一下这个问题,是图论的。想通了就很简单。呵呵,好好想想。
[/Quote]

按照我们几个(讨论小组。。。)的理解,如果对问题的理解没错的话,解法可能如下。

问题理解:若干人,划分为若干组。每组都有资源上限,如果多了就要减少。但是资源是从属于人的,必须通过减少具体人的资源,这样这个人会不高兴。同时,由于他不仅参加了一个组,所以会导致和他一个组的其他人也不高兴。

如果这样理解没错的话。。。

那么,把每个人看做一个结点,每一个小组内人互相之间用边连接起来。如果要减少,就减少“度”最小的那个人的。如果要增加,就增加“度”最大的那个人的。
simahao 2011-10-18
  • 打赏
  • 举报
回复
其实最终的目的是让组里的成员减少的最少就满足组的限制是最好的,不知道有没有好的算法
simahao 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 newwst 的回复:]
和人讨论了一下这个问题,是图论的。想通了就很简单。呵呵,好好想想。
[/Quote]

这么兄弟是想通了吗?能不能再详细些
simahao 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ccnunlp 的回复:]
首先,令SUM = A+B+C,sum = a+b+c,
1)若2SUM>sum,则总共需要减掉dsum = 2SUM - sum,然后令a需要减掉da,b需要减掉db,c需要减掉dc,则:
da + db + dc = dsum;
A - da + B - db = a,
B - db + c - dc = b
C - dc + A - da = c,线性方程组。
2)若2S……
[/Quote]

如果组很多,并且组内的成员也很多,岂不是非常非常的复杂方程
newwst 2011-10-17
  • 打赏
  • 举报
回复
和人讨论了一下这个问题,是图论的。想通了就很简单。呵呵,好好想想。
newwst 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 simahao 的回复:]
引用 4 楼 newwst 的回复:
什么叫“最合理”,衡量标准是什么?有具体的变量么?

类似递归,同时很像操作系统里关于给进程分配空间的问题。


最合理就是:比如给某个成员减少一定数量就可以使得组不超过限定值,如果要是给这个成员减少多了,其实也满足条件,但是这个成员可能就不高兴了,怎么使得超过限定值的组内的所有成员都满意
[/Quote]
牛啊,类似于管理学里的东西!
我们分析一下哈。假如现在a组多了40,如果要让每个人都减少得最好,最好的方法是各打五十大板,每个人都减少20。
但是这个不可能这么简单。所以,我想你的意思是不是说,让“三个组同时减少的总资源数最少”?
simahao 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 newwst 的回复:]
什么叫“最合理”,衡量标准是什么?有具体的变量么?

类似递归,同时很像操作系统里关于给进程分配空间的问题。
[/Quote]

最合理就是:比如给某个成员减少一定数量就可以使得组不超过限定值,如果要是给这个成员减少多了,其实也满足条件,但是这个成员可能就不高兴了,怎么使得超过限定值的组内的所有成员都满意
newwst 2011-10-17
  • 打赏
  • 举报
回复
如果说“使影响的人数最少”,那么任意一个人减少都是合理的。
如果说“使资源分配在组与组之间保持均衡”,那么每个人减少相同的量是合理的。
newwst 2011-10-17
  • 打赏
  • 举报
回复
什么叫“最合理”,衡量标准是什么?有具体的变量么?

类似递归,同时很像操作系统里关于给进程分配空间的问题。
tedcy 2011-10-17
  • 打赏
  • 举报
回复
能具体些么。
加载更多回复(2)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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