18910140161

Java描述贪心算法解决背包问题

顺晟科技

2021-08-28 09:42:22

168

思路: 首先将物品根据性价比排好序在一个集合里,性价比=价格/重量.

然后根据性价比从大到小依次依次放入背包,如果没办法放入这个物品的全部,就放入一部分,如果可以放入全量物品,就放入全量物品。

Main.java的代码

导入Java。乌提尔。ArrayList

导入Java。乌提尔。收藏品;

导入Java。乌提尔。比较器;

/**

*由罗虎于2016年2月16日创建。

*/

公共类主要的

{

//背包总质量

私静双M=20

//物品数量

私有静态(同Internationalorganizations)国际组织数=3;

公共静态void main(字符串[]参数)

{

MyObject myObject1=新的MyObject(18,25);

MyObject myObject2=新的MyObject(15,24);

MyObject myObject3=新的MyObject(10,15);

arraylismyobject myObjects=new arraylismyobject(数字);

我的目标1。价格比=(myobject 1。价格* 1.0)/(myobject 1。重量);

我的目标2。价格比=(myobject 2。价格* 1.0)/(myobject 2。重量);

我的目标3。价格比=(myobject 3。价格* 1.0)/(myobject 3。重量);

我的物品。添加(我的对象1);

我的物品。添加(我的对象2);

我的目标。添加(my object 3);

//根据物品的性价比将集合中的物品做一个排序,按照性价比从大到小排列

Collections.sort(myObjects,new ComparatorMyObject()

{

@覆盖

公共(同Internationalorganizations)国际组织比较(MyObject o1,MyObject o2)

{

if(o1.priceRatio o2.priceRatio)

{

返回-1;

}

其他

返回1;

}

} );

MyObject温度=空

for(int I=0;我数m ^ 0;(一)

{

temp=myobjects。得到(我);

if(M=温度重量)

{

M=M -温度重量;

温度x=1.0

}

其他

{

温度x=(M * 1.0 ) /温度重量;

M=M -(温度重量*温度x);

}

}

用于(MyObject myObject : myObjects)

{

System.out.println('物品价格是:' myObject.price '的物品,装入比例是: ' MyObject。x);

}

}

}

MyObject.java文件的代码

/**

*由罗虎于2016年2月16日创建。

*/

/**

* 物品对象

*/

公共类对象

{

公共国际权重=0;

public int price=0;

//装入的比例

公共双x=0;

//性价比

公共双价比率=0;

公共MyObject(整数权重,整数价格)

{

this.weight=重量;

这个,价格=价格;

}

}

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航