给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
package 实验四;
public class 背包问题 {
public static void main(String[] args) {
A a=new A();
a.init();
a.sort();
a.show1();
a.Knaspack();
a.show2();
}
}
class Date1{
int num; //物品序号
float w; //物品重量
float v; //物品价值
}
class A{
Date1 [] date=new Date1[3];
int n=date.length; //物品数量
float C=50; //背包负重
float total;
//////////////////////////////////初始化
void init() {
date[0]=new Date1(); date[1]=new Date1(); date[2]=new Date1();
date[0].num=1; date[0].w=20; date[0].v=60;
date[1].num=2; date[1].w=30; date[1].v=120;
date[2].num=3; date[2].w=10; date[2].v=50;
}
////////////////////////////////排序
void sort() {
int i,j;
for(i=0;i<date.length-1;i++) {
for(j=0;j<date.length-1-i;j++) {
Date1 t=new Date1();
t=date[j]; date[j]=date[j+1]; date[j+1]=t;
}
}
}
void show1() {
int i;
System.out.print("排序后为:");
for(i=0;i<date.length;i++) {
System.out.print(date[i].num+" ");
}
System.out.println();
}
/////////////////////////////贪心算法
void Knaspack() {
int i=0,j;
total=0;
while(date[i].w<C) {
total=total+date[i].v;
C=C-date[i].w;
i++;
}
total=total+C/date[i].w*date[i].v;
}
void show2() {
System.out.print("total为:");
System.out.println(total);
}
}