虽然这道题写着的是背包问题,但我觉的不一定要用背包问题的思想去做,个人觉得这个思路更像是贪心算法的思路
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner as=new Scanner(System.in);
int N=as.nextInt() ;//金币堆数
int T=as.nextInt();//背包承重
double[][] jin=new double[N][2];//金币的重价比和其重量
double DaiZou=0;
for(int i=0;i<N;i++){
jin[i][1]=as.nextInt();//重
double b=as.nextInt();//价
jin[i][0]=b/jin[i][1];//比值
// System.out.println(jin[i][0]);
}
while (T>0){
int max=0;
int i=0;
for(;i<N;i++){
if (jin[i][0]>jin[max][0]) max=i;//更新最大比的下标
}
//计算还可以带走多少
double d;
if(T>jin[max][1]) d=T-(T-jin[max][1]);//当背包容量大于金币堆时
else d=T;//当背包低于或等于金币堆时
DaiZou+=d*jin[max][0];
T-=jin[max][1];//背包剩余重量
jin[max][0]=0;//当前最贵的金币被带走
// System.out.println("重量="+T+" 带走"+jin[max][0]+" d"+d+" ");
}
System.out.printf("%.2f",DaiZou);
}
// 4 50
// 10 60
// 20 100
// 30 120
// 15 45
}