当前位置: 首页 > 编程笔记 >

c语言来实现贪心算法之装箱问题

秦宁
2023-03-14
本文向大家介绍c语言来实现贪心算法之装箱问题,包括了c语言来实现贪心算法之装箱问题的使用技巧和注意事项,需要的朋友参考一下

装箱问题,贪心算法求近似最优解


import java.util.Arrays;

import java.util.Comparator;

//装箱问题,贪心算法

public class Enchase {

    public void test1() {

        Integer[] boxs={34,6,40,2,23,12,12};

        int boxCaptation=40;//箱子容量

        //倒序

        Arrays.sort(boxs, new Comparator<Integer>() {

            @Override

            public int compare(Integer o1, Integer o2) {

                return o2-o1;

            }

        });

        int unEnchase=boxs.length;//未装箱数

        int minIndex=boxs.length-1;//最小的箱子指向

        while (unEnchase>0) {

            for(int i=0;i<boxs.length;i++){

                //位置箱子重量为零跳过

                if(boxs[i]==0){

                    continue;

                }

                unEnchase--;

                while((boxCaptation-boxs[i])>=boxs[minIndex]){

                    int k=i+1;

                    for(;k>i;k++){

                        //位置箱子重量为零跳过

                        if(boxs[k]==0){

                            continue;

                        }

                        //将箱子加上去,原来位置清零

                        boxs[i]+=boxs[k];

                        int temp=boxs[k];

                        boxs[k]=0;

                        unEnchase--;

                        if(boxs[i]>boxCaptation){

                            //超过最大可容纳体积,状态复原

                            unEnchase++;

                            boxs[k]=temp;

                            boxs[i]-=boxs[k];

                            continue;

                        }

                        //最小箱子更新

                        if(k==minIndex){

                            for(int y=minIndex;y>0;y--){

                                if(boxs[y]!=0){

                                    minIndex=y;

                                }

                            }

                        }

                        break;

                    }

                }

            }

        }

        //统计箱子数

        int Boxcount=0;

        System.out.println("装箱结果:");

        for(int i=0;i<boxs.length;i++){

            System.out.print(boxs[i]+"\t");

            if(boxs[i]==0){

                continue;

            }

            Boxcount++;

        }

        System.out.println("\n箱子数:"+Boxcount);

    }

    public static void main(String[] args) {

        new Enchase().test1();

    }

}

以上就是本文的全部内容了,希望大家能够喜欢。

 类似资料:
  • 本文向大家介绍python 贪心算法的实现,包括了python 贪心算法的实现的使用技巧和注意事项,需要的朋友参考一下 贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不

  • 本文向大家介绍C++贪心算法实现活动安排问题(实例代码),包括了C++贪心算法实现活动安排问题(实例代码)的使用技巧和注意事项,需要的朋友参考一下 贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后

  • 本文向大家介绍C++ 搬水果贪心算法实现代码,包括了C++ 搬水果贪心算法实现代码的使用技巧和注意事项,需要的朋友参考一下 C++ 搬水果贪心算法实现代码 (1)题目描述:     在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成

  • 本文向大家介绍C语言实现链表贪吃蛇,包括了C语言实现链表贪吃蛇的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现贪吃蛇的具体代码,供大家参考,具体内容如下 用C语言链表写的贪吃蛇(程序设计时做的,做的不好大佬勿喷) 借助游戏内容分析贪吃蛇所需的功能主要包括这几块: 1.移动光标模块 2.打印地图模块和基本规则信息 读取最高分文件 3.打印初始蛇模块 打印时给予蛇的初始移动方向

  • 主要内容:贪心算法的实际应用《 算法是什么》一节讲到,算法规定了解决问题的具体步骤,即先做什么、再做什么、最后做什么。贪心算法是所有算法中最简单,最易实现的算法,该算法之所以“贪心”,是因为算法中的每一步都追求最优的解决方案。 举个例子,假设有 1、2、5、10 这 4 种面值的纸币,要求在不限制各种纸币使用数量的情况下,用尽可能少的纸币拼凑出的总面值为 18。贪心算法的解决方案如下: 率先选择一张面值为 10 的纸币,可以

  • 本文向大家介绍C语言实现K-Means算法,包括了C语言实现K-Means算法的使用技巧和注意事项,需要的朋友参考一下 一、聚类和聚类算法 聚类,就是将数据对象划分成若干个类,在同一个类中的对象具有较高的相似度,而不同的类相似度较小。聚类算法将数据集合进行划分,分成彼此相互联系的若干类,以此实现对数据的深入分析和数据价值挖掘的初步处理阶段。例如在现代商业领域,聚类分析算法可以从庞大的数据集合中对消