Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我也在想这个问题In Reply To:虽然AC了,不过还是有点质疑 Posted by:new_star at 2008-02-18 07:10:56 每一个木棍可能会有多组解 如果当前的木棍已经取得解就不管其他解了,会不会因为此木棍占用了某些木棍而导致其他木棍无解了 而如果此木棍使用其他解的话可能会使其他木棍有解? 想不通这个问题。。。 39 49 13 21 17 26 48 21 14 24 33 29 20 48 11 20 40 48 31 1 19 22 3 14 47 35 9 35 34 29 27 45 4 24 47 8 21 1 46 10 这组数据 降序排序是 49 48 48 48 47 47 46 45 40 35 35 34 33 31 29 29 27 26 24 24 22 21 21 21 20 20 19 17 14 14 13 11 10 9 8 4 3 1 1 输出是71 按49,48,48....的次序依次找其对应的解 按照这种方法 前11组解是 49 22 48 21 1 1 48 20 3 48 19 4 47 24 47 24 46 17 8 45 26 40 31 35 27 9 此时搜索第12个解,从未使用过的第二个35开始,但是找不到解。。。。 我想可能是在前11组解中的某个木棍一定有其他解,把35的占用了 怎样来避免这种情况呢? 欢迎大家一起来讨论下 > //木棍长度已按升序排序,已经完成k根,第k+1根已完成长度ll,应该用t以后的木棍填充 > bool search( int k, int ll, int t ) > { int p; > if ( k == num ) return true; > for ( int i = t; i <= sticksNum; i++ ) { > if ( ! used[i] ) { > if ( (p = ll+stick[i]) < goalLen ) { > used[i] = true; > if ( search( k, p, i+1 ) ) return true; > used[i] = false; > } > else if( p == goalLen ) { > used[i] = true; > if( search( k+1, 0, 1 ) ) return true; > used[i] = 0; > break;//开始没有这条语句,结果TLE > } > if ( ll == 0 ) break; > } > } > return false; > } > 疑问:如果存在某个长度正好填满一根原始木棍,就真的不该考虑其他长度的木棍了么? > 刘泸佳的书上是认可的,如果能用更长的原始木棍,长度将会超过t,显然不行; > 如果使用更短的,即使存在某个也能填满木棍的方法,该方法也一定不会比用大木头更有希望获得可行解。 > 这样,一旦发现某木棍能填满该原始木棍,就没有必要考虑其他木棍了, > 时间效率大大提高,数据不到0.01秒解出。 > 正准备证明这个结论,大家一起讨论下 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator