题目描述:
- 有n个物体,第i个物体的重量为wi,价值为 vi 。在重量不超过C的情况下让总价值尽量高。
- 每一个物体都可以只取走一部分,价值和重量按比例计算。
- 求最大总价值
- 注意:每个物体可以只拿一部分,因此一定可以让总重量恰好为C
题目很容易理解,直接写代码
import java.util.*;
public class Main{
public static void main(String[] args){
int [] w = {1 , 3 , 2 , 4 , 5};
int [] v = {3 , 3 , 4 , 1 , 4};
int n = w.length;
double c = 10;
Obj[] objs = new Obj[n];
for(int i=0;i<n;i++){
objs[i] = new Obj(w[i] , v[i]);
}
Arrays.sort(objs);
double maxValue = 0;
for(int i=n-1;i>=0;i--){
if(objs[i].w <= c){
maxValue += objs[i].v;
c -= objs[i].w;
}else{
maxValue += objs[i].v*(c/objs[i].w);
break;
}
}
}
private static class Obj implements Comparable<Obj>{
int w;
int v;
public Obj(int w,int v){
this.w = w;
this.v = v;
}
public double getPrice(){
return v/(double)w;
}
@Override
public int compareTo(Obj o){
if(this.getPrice()-o.getPrice()>0) return 1;
else if(this.getPrice()-o.getPrice()<0) return -1;
else return 0;
}
@Override
public String toString() {
return "Obj [w=" + w + ", v=" + v +", price="+getPrice()+ "]";
}
}
}
运行结果: 13.2