一般揹包問題的貪心算法

2.寫出一般揹包問題的貪心算法。
輸入:先輸入物品的個數n,再輸入揹包的容量c,然後依次輸入物品的重量wi,最後依次輸入物品的價值vi。注意:所有值都不能隨機生成!!!
輸出:物品的選擇向量xi,0=

public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int c=scan.nextInt();
        double w[]=new double [n];
        double v[]=new double [n];
        double index[]=new double [n];
        double x[]=new double [n];
        for (int i = 0; i < n; i++) {
            w[i]=scan.nextInt();
        }
        for (int i = 0; i < n; i++) {
            v[i]=scan.nextInt();
        }
        for (int i = 0; i < n; i++) {
            index[i]=i;
        }
        aaa(w, v, index, x, n, c);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (index[j]==i) {
                    System.out.print(x[j]+" ");
                }
            }
        }
    }
    public static void aaa(double w[],double v[],double index[],double x[],int n,double c)
    {
        for (int i = 0; i < n; i++) {
            for (int j = i+1; j < n; j++) {
                    if (v[i]/w[i]<v[j]/w[j]) {
                        double m=w[i];
                        w[i]=w[j];
                        w[j]=m;
                        m=v[i];
                        v[i]=v[j];
                        v[j]=m;
                        m=index[i];
                        index[i]=index[j];
                        index[j]=m;
                    }
                }
            }
        int i;
        for ( i = 0; i < n; i++) {
            x[i]=0;
        }

        for (i = 0; i < n; i++) {
            if (w[i]>c) {
                break;
            }else {
                x[i]=1;
                c-=w[i];
            }
        }
        if (i<n) {
            x[i]=c/w[i];
        }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章