放盒子

来源:互联网 发布:怎么举报淘宝售假 编辑:程序博客网 时间:2024/06/09 19:49

题目描述:
第七题
小y 有一个宽度为 100cm,高度为 20cm,深度为 1cm 的柜子,如下图。
这里写图片描述

小y 还有 3636 个礼物盒,他们的深度都为 1cm。
他们对应的宽度和高度如下,单位(cm)。
这里写图片描述
现在小y 想把这些盒子放到柜子上,由于礼物盒里面都装有礼物,礼物盒必须向上放置,并且不能堆放。由于礼物盒深度和柜子深度一样,所以礼物盒和柜子深度方向也必须一致。并且礼物盒的高度还不能大于柜子的高度,否者放不进去。小y 希望放到柜子上礼物盒的宽度和正好等于柜子的宽度,也就是希望柜子两边都不存在间隙。如下图符合条件的放置。
这里写图片描述
满足条件的情况下,小y 希望能尽可能多的放置礼物盒,算出最多能放多少个礼物盒。

思路:贪心

import java.util.Arrays;public class Main { static int[] a={11,8,11,16,1,2,6,10,17,10,6,5,2,19,4,7,5,5,15,3,15,11,9,17,9,4,10,12,17,19,20,11,10,20,3};  static int[] v={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static int j=0; public static void fanghezi(int n) {  int sum=0;  int f=0;  for(int i=0;i<35;i++)  {   if(v[i]==1)   {    f++;    sum=sum+a[i];          }  }  if(sum==100)  {   System.out.println(f);   throw new StopMsgException();  }  for(int i=n;i<35;i++)  {   if(v[i]==0&&a[n]<=100-sum)   {    v[i]=1;    fanghezi(i+1);    v[i]=0;   }  } } static class StopMsgException extends RuntimeException { } public static void main(String[] args) { try {      Arrays.sort(a);  fanghezi(0);     } catch (StopMsgException e) {         System.out.println(e);     } }}



0 0
原创粉丝点击