zoukankan      html  css  js  c++  java
  • Greedy for Fractional Knapsack

    部分背包(Fractional Knapsack)

    按性价比排好序列

    一个一个往进去装直到最后一个不能全装进去计算比例

    JAVA

    public class FractionalKnapsack {
            public static float[] GREEDY_KNAPSACK(int[] w,int W,int[] v)
        {
            int i;
            int n=w.length;//总共有多少个物品,用w.length/v.length都可以
            float[] x=new float[n];
            for(i=0;i<n;i++)
            {
                x[i]=0;//初始化
            }
            float c=W;//c是包剩余容量        
            for(i=0;i<n;i++)
            {
                if(w[i]<=c)//如果第i个物品的重量<剩余容量
                {
                    x[i]=1;//全部取出,比例百分百
                    c=c-w[i];//改变剩余容量
                }
                else break;//跳出循环
            }
            if(i<n&&c>0)
                x[i]=c/w[i];//算出剩下能装的容量占这个物品的比例,也就是取出的比例
            return x;
            
        }
        public static void PRINTARRAY(float[] array) {
            System.out.print("{");
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i]);
                if (i < array.length - 1) {
                    System.out.print(", ");
                }
            }
            System.out.println("}");
        }
        public static void main(String[] args)
        {
            int [] A={65,20,30,60,40};
            int [] B={30,10,20,50,40};
            float [] x=GREEDY_KNAPSACK(B,100,A);
            PRINTARRAY(x);
        }
    
    }

    輸出:{1.0, 1.0, 1.0, 0.8, 0.0}

    比例不是整數改爲用float;

    性價比排序現為人爲排序,待修改

  • 相关阅读:
    discuz_ucenter_api_for_java的中文问题
    java的编码问题详解
    java的泛型的技巧
    向maven中央仓库提交jar
    Java并发之FutureTask
    java并发之Semaphore
    centos中JDK版本冲突的问题
    C++中嵌入Python
    boost::python的使用
    c++调用python引号的问题
  • 原文地址:https://www.cnblogs.com/Ljj-Nancy/p/5437037.html
Copyright © 2011-2022 走看看