本文共 2181 字,大约阅读时间需要 7 分钟。
这里用到了贪心算法,
先计算每一个物品的单位价值(pi价值/gi每个物品的重量),每一次把单位价值最高的物品装进车子里。当车的重量小于要装的重量,则把(剩下要装的物品的重量 乘以 单位物品的价值)都装进车里;当车的重量大于等于要装的重量,则把那个全部物品装进车里。。
第一次做的代码和第二次做的代码,区别在于:当w大于所有货物加起来的重量时,程序就会进入死循环,因为w会一直大于0,而那个flag是控制当所有的货物遍历完了,都没找到一个最大价值时,退出while循环。
(感谢一起参加蓝桥杯的同学)
第一次做的代码如下:(90分)
import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//数量 double w = scanner.nextInt();//重量 //第3列为:每一个物品的单位重量的价值 //第4列为:判断物品是否已经装进车里了,如果装进车里了则为1,还没有装进车的则为0 double[][] arr = new double[n][4]; for(int i=0;i第二次做的代码如下:(100分)0){//当车载重大于0的时候,还可以载物品 double max=0; int index = 0; for(int i=0;i max&&arr[i][3]==0){ max=arr[i][2]; index=i; } if(i==n-1){//每次检测最后一个,把最大值的下标赋1 arr[index][3]=1; } } if(w =arr[index][0]){//车的重量大于等于要载的重量 result+=arr[index][1]; w-=arr[index][0]; } } System.out.printf("%.1f",result); }}
import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//数量 double w = scanner.nextDouble();//重量 double[][] arr = new double[n][4]; //第3列为:每一个物品的单位重量的价值 //第4列为:判断物品是否已经装进车里了,如果装进车里了则为1,还没有装进车为0 for(int i=0;i0){//当车载重大于0的时候,还可以载物品 double max=0; int index=0; boolean flag=true; for(int i=0;i max&&arr[i][3]==0){ max=arr[i][2]; index=i; flag=false; } } arr[index][3]=1; if(flag){ break; } if(w =arr[index][0]) result+=arr[index][1]; w-=arr[index][0]; } } System.out.printf("%.1f",result); }}
转载地址:http://yuwkf.baihongyu.com/