Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1003630
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: Python/Ruby

2012-05-23 19:00:03

目前算法复杂度最差情况应该是O(n^3),最好情况O(n^2), 按最好的算法O(n^2)就可以了。 但是改了半天改不出来。    不知道是不是复杂度算错了。
 
有一批编号为1N且尺寸规格一样的箱子。现在要将其中某些箱子叠放起来,使叠放的高度最大,箱子叠放的规则如下:
    一、每个箱子上最多只能直接叠放一个箱子;
    二、编号较小的箱子不能放在编号较大的箱子之上;
    三、每个箱子都给出了自身重量可承受重量,每个箱子上的所有箱子重量之和不得超过该箱的可承受重量。

      输入箱子数N1N1000)及每个箱子的自身重量与可承受重量,两个数值均为小于等于3000的正整数。

    输出最多可叠放的箱子总数M

 


 

  1. my @data = (
  2.  [19,11],
  3.  [7,6],
  4.  [5,7],
  5.  [6,8],
  6.  [1,2]
  7. );
  8. my @result;
  9. my $max;
  10. for my $i (0 .. @data){
  11.  $result[1][$i] = $data[$i][0];
  12. }
  13. for (my $i = (@data-3); $i>=0; $i--){
  14.  for my $c (2.. @data-$i-1){
  15.   for($i+1 .. @data-$c){
  16.    if(defined($result[$c-1][$_]) and $result[$c-1][$_]<=$data[$i][1]){
  17.     $result[$c][$i] = $data[$i][0]+$result[$c-1][$_];
  18.     $max = $c;
  19.     last;
  20.    }
  21.   }
  22.  }
  23. }
  24. for(@result){
  25.  print "@{$_} \n";
  26. }

  27. print $max;


 

阅读(1547) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~