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

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

复制代码 代码如下:

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();
    }
}

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

时间: 2024-08-10 20:06:33

c语言来实现贪心算法之装箱问题_java的相关文章

贪心算法-c语言算法,基数求解最小构成

问题描述 c语言算法,基数求解最小构成 功能:有一组基数值(正整数),输入一个正整数(小于100), 问:如果该数由基数值相加构成(每个基数可以重复使用) ,那么最少可能利用的基数是多少个. #include <stdio.h> #include <stdlib.h> #define MAXSiZE 100 /*#define min(a,b) ((a) <= (b) ? (a) : (b))*/ void main(void) { int num[MAXSiZE+1]; i

贪心算法的C语言实现与运用详解_C 语言

贪心算法 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解.贪心算法的基本思路如下: 1.建立数学模型来描述问题. 2.把求解的问题分成若干个子问题. 3.对每一子问题求解,得到子问题的局部最优解. 4.把子问题的解局部最优解合成原来解问题的一个解.   实现该算法的过程: 从问题的某一初始解出

采用C++实现区间图着色问题(贪心算法)实例详解_C 语言

本文所述算法即假设要用很多个教室对一组活动进行调度.我们希望使用尽可能少的教室来调度所有活动.采用C++的贪心算法,来确定哪一个活动使用哪一间教室. 对于这个问题也常被称为区间图着色问题,即相容的活动着同色,不相容的着不同颜色,使得所用颜色数最少. 具体实现代码如下: //贪心算法 #include "stdafx.h" #include<iostream> #define N 100 using namespace std; struct Activity { int n

贪心算法 WOODEN STICKS 实例代码_C 语言

Problem DescriptionThere is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking machine in one by one fashion. It needs some time, called setup time, for the machine to

一些C语言中字符串的算法问题解决实例小结_C 语言

    字符串问题是面试中经常出现的问题,这类问题有很多,难以不一.下面是几道字符串的题目,网上都能找到解答,自己实现了一下,供网友参考.感觉算法重要的是要有正确的思路,实现起来不是问题.自己一定要多思考,这样收获可能会更多一点.         问题1:找两个字符串的最长公共子串.         具体描述,如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输入两个字

贪心算法的理解与实例应用

问题描述 贪心算法的理解与实例应用 对贪心算法的深刻理解,以及贪心算法的经典应用,对相应的实例进行分析 解决方案 哈夫曼树-贪心算法的应用实例strtotime 深入理解应用实例---------------------- 解决方案二: 可参考 http://blog.csdn.net/effective_coder/article/details/8736718

关于贪心算法的题目的一个问题

问题描述 关于贪心算法的题目的一个问题 OJ上的一道题Given Length and Sum of Digits 题目是 我写的答案是 代码链接是 http://codepad.org/LirbPkpG 在oj上提交后出现"Wrong answer on test 8" 这是因为错在哪里? 解决方案 一个贪心算法实例Dijkstra算法是解单源最短路径问题的一个贪心算法 解决方案二: 应该是说的,这道题答案是错误的,你没有在本地环境测试一下么,报错是啥内容,这个算法乍一看,看不出问题

算法——贪心算法

贪心算法 贪心算法通过一系列的选择来得到问题的解.它所做的每一个选择都是当前状态下局部的最好选择,即贪心选择. 贪心选择的一般特征:贪心选择性质和最优子结构性质. 贪心选择性质: 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到.这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别.在动态规划算法中,每步所做的选择往往依赖于相关子问题的解.因而只有在解出相关子问题后,才能做出选择.而在贪心算法中,仅在当前状态下做出最好选择,即局部最优选择.

用java写装载问题(用贪心算法和分支界限算法)

问题描述 用java写装载问题(用贪心算法和分支界限算法) 用java写算法中的装载问题,代码~(用分支限界算法和贪心算法写)... 解决方案 http://www.cnblogs.com/tianshuai11/archive/2012/05/04/2490852.html