数学建模社区-数学中国

标题: 分配难题 [打印本页]

作者: maybe_madio    时间: 2010-10-24 09:28
标题: 分配难题
      设有4个盒子,标号为1,2,3,4.   有15个颜色相同的小球, 现在要将15个颜色相同的小球分配到4个盒子中,
& v( o( n9 n1 Z2 C9 X1 Z8 R" L要求每个盒子至少有一个小球,并且对于盒子中小球的数目,盒子1>盒子2>盒子3>盒子4.  请问一共有多少种分配方法.
0 g/ d7 e% Z6 R6 f6 ?
作者: fgfroom214    时间: 2010-10-24 09:54
先在每个盒子中放一个小球,就变成11个小球随意放在四个盒子里,这样就变成了一个分折成4个数的加法了
7 I( r. q8 `) {3 J
作者: maybe_madio    时间: 2010-10-24 10:08
回复 fgfroom214 的帖子
5 Y6 H! @( R( S  [) T  b7 m
, M! e( a/ _- @: l# C( s* M- B
( ]8 B0 J/ d8 Y7 x4 p    你说的是x1+x2+x3+x4=15, 将每个盒子先放一个后,就转化成x1+x2+x3+x4=11了,再使用C(14, 3)就可以得到所有解了,但是必须要求x1>x2>x3>x4的嘛! 这样又该怎么建模呢?
作者: 081270053    时间: 2010-10-24 10:45
先放个1234,再分15-10试试?
作者: 081270053    时间: 2010-10-24 10:45
先放个1234,再分15-10试试?
作者: hhex01    时间: 2010-10-24 11:52
6?         
作者: Baby_Boy    时间: 2010-10-24 12:02
1、首先 1<= X4 <=2 (若X4>2, 3+4+5+6=18>15); 6<=X1<=9
" b6 I" U: M  r: m* V9 i1 ]2、X4=1,剩下14球,三个分,按上面方法,2<= X3 <=3,所以去取X3=2,或3,,,,,: O8 V, `6 }3 I, u* o6 E9 J
  X4   X3   X2   X1
; f9 k  i2 K2 _+ P' U9 m# G* ^ 1     2     3     9
, U6 }, A! F( z8 A5 [  F! N               4     8' I4 u0 x+ Q! e+ z% r
               5     7
2 B& ?6 c  r: t" G9 p       3      4     7
1 Z$ h$ v5 r5 F4 d               5     7# @. b/ ~3 _7 t/ _& Q
2     3     4     6
9 X& o5 R: _' ^( v: X
作者: 吴宇昊    时间: 2010-10-24 12:24
这个不是排列组合的题目吗?
作者: 1124629740    时间: 2010-10-24 17:53

作者: 1124629740    时间: 2010-10-24 17:53

作者: cheeryoung    时间: 2010-10-24 19:13
1239
+ a! \; y- w2 E( U; I& l9 W0 x1248
3 @; K9 E9 b1 z6 \' Y7 W1257
2 G, |6 K: S' A1347
4 I1 L9 Q7 {! ~. W) D! j9 u2346
作者: 1124629740    时间: 2010-10-24 22:18

作者: guoshaoming    时间: 2010-10-25 00:04
本帖最后由 guoshaoming 于 2010-10-25 00:08 编辑
! d. \1 a! x  b% \5 x8 L; q2 {& a3 i4 a' g4 l0 f
回复 maybe_madio 的帖子
( P0 t) @1 G4 M8 d: O' C分配方案如下:
9 u4 k- i6 _: F* T$ s: [! Q6       4       3       2* s2 R& [$ c! p/ ?$ f- [8 A# A
6       5       3       1# s$ _6 u) Z9 I/ b5 M
7       4       3       1
% I) q# z0 o6 J9 ?1 J/ L- X7       5       2       1
2 F' u2 U6 [: }, w8       4       2       18 @! _; x# P0 z( C
9       3       2       1+ U! K4 |; h0 h; R/ Y4 }
其代码如下:
% {# j0 P/ R# x8 _#include < iostream >
1 z, M; f0 k1 J  f( J5 F. [7 X8 {6 c4 X8 d9 j
using namespace std;+ g9 s* |; X' p! w

3 M) ~5 i5 i0 P/ h( A% Q
2 \3 Z9 E) @# _- l6 z$ Xint main()
5 s0 f: `; d! o: t& M{2 A9 x2 Y2 m4 s
int x1,x2,x3,x4;7 S" Y/ j+ Z* B: G4 U
int t=0;+ O& c( a  O2 E1 j" {3 s

0 z" Z: Q- R5 I1 Nfor(x1=1;x1<15;x1++)) [) ~) f3 I" _* ]$ @1 k5 {
for(x2=1;x2<15;x2++)' e2 [/ d% D6 E1 Y
for(x3=1;x3<15;x3++)
5 `2 u5 v9 w5 k) i/ kfor(x4=1;x4<15;x4++)
# O4 b7 t$ a' R8 e{0 V; Q2 M  B7 D( {
if((x1+x2+x3+x4==15)&&(x1>x2)&&(x2>x3)&&(x3>x4))6 b7 x0 q, s, z; l# {3 J! D8 K2 D
cout<<x1<<"\t"<<x2<<"\t"<<x3<<"\t"<<x4<<endl;9 T4 B- m7 H& c6 h0 z
* l" f* |- C1 t4 m* [  F
}
/ d, x. V) B6 c% V: x2 u% }4 Xreturn 0;: m. Q& B1 g- a5 ^9 P3 z
}
* ?6 w. j( i0 S* e5 v7 P2 p
; C0 d0 p6 O* Y3 s3 s$ v   
作者: maybe_madio    时间: 2010-10-25 19:47
回复 guoshaoming 的帖子3 i( R# G  c! p" z! ?5 ?& K8 u

: O: t! M, O# `8 b! G8 F1 ^, X! O6 L- V3 L, O( V1 i3 a! U
    虽然对于15来说,比较容易算出, 那如果我的变量再增多呢? 假设有x1+x2+..xm=n呢?(m<n)
/ `4 H7 n, V9 M% i( G2 X能否有更好的程序算法来解决这个问题呢? 你的穷举算法也只能适用于少量的变量和n较小的特例,当变量增多,或是n变大,这是阶乘级的时间复杂度哦!- ~) d0 V9 c5 \7 u3 z

作者: guoshaoming    时间: 2010-10-25 22:52
回复 maybe_madio 的帖子3 w% o0 m, b3 ]8 g- ?/ w" |4 G
本身这个算法就很具有一般性,如果你增加变量,只要对程序稍加改动就可以了,( k* `, r* V2 T1 H5 g- |) _
for(xm=1;xm<n;xm++)2 L' Y" E/ F$ B, M. `# X0 U
然后判断语句和输出也做相应改变
: m& d4 \+ O0 W3 w0 d: K8 F9 C5 [# L& d& E6 l2 k% I+ u6 m; e( b
   
作者: guoshaoming    时间: 2010-10-25 23:17
回复 maybe_madio 的帖子4 B6 {# _# W' H, Q1 |
当你的变量大到一定程度的时候,你可以将约束条件写成一个循环语句,判断、输出也可以写成相应的循环语句!
6 q2 S( w% r9 n2 r- P反正程序的总体思路就是上面那个,过多的我就不多说了" d' D$ j, i$ ]. C
   
作者: linmatsas    时间: 2010-10-25 23:21
要是好多好多球好多好多盒子可怎么办呢…………这真是一个问题呀………………不过一时想不出来其他算法了……应该穷举能做呀…………应该用不了几个小时吧…………
作者: whui    时间: 2012-1-1 15:54
13种呀。。。。。。。。。。。。。。。。
作者: whui    时间: 2012-1-1 18:35
13种。。。。。。。。。。。。。
作者: 漂流者    时间: 2012-1-5 18:29
可以先把15个球排成一排,然后从他们之间的14个间隔里插入3块板,就可以把15个小球分成4份了,用这个思想,可以很容易解决你的问题,隔板法是很经典的东西。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5