package n18_背包问题贪心算法;
public class Main {public static void main(String[] args) {double w[] = { 0, 50, 80, 30, 40, 20, 60, 10 ,1};double v[] = { 0, 500, 400, 210, 240, 60, 480, 900,100 };double M = 170;int n = w.length - 1;double[] x = new double[n + 1];f(w, v, M, n, x);System.out.println("排序后的物体的重量:");for(int i=1;i<=n;i++){System.out.print(w[i]+"\t");}System.out.println();System.out.println("排序后的物体的价值:");for(int i=1;i<=n;i++){System.out.print(v[i]+"\t");}double[]t=new double[n+1];for(int i=1;i<=n;i++){t[i]=v[i]/w[i];}for(int i=1;i<=n;i++){for(int j=1;j<=n-i;j++){if(t[j]1]){double temp=t[j];t[j]=t[j+1];t[j+1]=temp;}}}System.out.println();System.out.println("排好序后的单位物体的价值: ");for(int i=1;i<=n;i++){System.out.print(t[i]+"\t");}double maxValueSum=0; for(int i=1;i"排序后每个物体装进背包的比例:");for(int i=1;i<=n;i++){System.out.print(x[i]+"\t");}System.out.println();System.out.println("背包能装下的物体的最大价值总和为: "+maxValueSum);}/*** * @param w 物体的重量* @param v 物体的价值* @param M 背包的容量* @param n 物体的个数* @param x 每个物体装进背包的比例,取值0<=x[i]<=1,(1<=i<=n)*/private static void f(double[] w, double[] v, double M, int n, double[] x) {sort(w, v, n);double c = M; int i;for (i = 1; i <= n; i++) {if (w[i] <= c){x[i] = 1; c -= w[i]; }else { break; }}if (i <= n){x[i] = c / w[i]; }}private static void sort(double[] w, double[] v, int n) {double []t=new double[n+1];for(int i=1;i<=n;i++){t[i]=v[i]/w[i];}for(int i=1;i<=n;i++){for(int j=1;j<=n-i;j++){if(t[j]1]){double temp=t[j];t[j]=t[j+1];t[j+1]=temp;double temp2=w[j];w[j]=w[j+1];w[j+1]=temp2;double temp3=v[j];v[j]=v[j+1];v[j+1]=temp3;}}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!