今天花椰妹生日,蒜头君打算给花椰妹买些礼物。蒜头君十分清楚花椰妹的喜好,知道花椰妹对每种物品的喜好程度。市场上有 20 种物品是花椰妹喜欢的,蒜头君虽然想把这 20 种物品全部购买,但是书包容量只有 500 。蒜头君在想怎么买东西能让花椰妹最开心呢(每种物品只能购买一次,所购买的物品空间总和不能超过背包容量)?
下面是每种物品所占用的空间,和花椰妹的喜欢程度。
2 1
10 5
22 5
23 5
23 4
32 5
13 2
35 5
21 3
22 3
25 3
35 3
64 5
34 2
85 5
88 4
85 3
82 2
76 1
98 1
package 蓝桥杯2018年B组第三次模拟赛;
import java.util.Arrays;
import java.util.Scanner;
public class 生日购物 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//贪心算法,将喜欢程度/所占空间的比值进行从大到小排序
//或者说是将所占空间/喜欢程序的比值进行从大到小排序
Scanner scan=new Scanner(System.in);
int[][] arr=new int[20][2];
for(int i=0;i<20;i++){
for(int j=0;j<2;j++){
arr[i][j]=scan.nextInt();
}
}
Flower[] fs=new Flower[20];
for(int i=0;i<20;i++){
fs[i]=new Flower(arr[i][0],arr[i][1]);
}
Arrays.sort(fs);
for(int i=0;i<20;i++){
System.out.println(fs[i]);
}
int sum=0;//占用空间
int xihao=0;//总喜好值
for(int i=0;i<20;i++){
sum+=fs[i].getKongjian();
if(sum<500){
xihao+=fs[i].getXihao();
//System.out.println(fs[i].getKongjian());
}
else{
sum-=fs[i].getKongjian();
xihao+=((500-sum)*1.0/fs[i].kongjian)*fs[i].getXihao();//最后一种花不能全部买完,就买了部分(按照题目正确答案的意思)将500空间全部用完
break;
}
}
System.out.println(xihao);
}
}
class Flower implements Comparable<Flower>{
int kongjian;
int xihao;
public int getKongjian() {
return kongjian;
}
public void setKongjian(int kongjian) {
this.kongjian = kongjian;
}
public int getXihao() {
return xihao;
}
public void setXihao(int xihao) {
this.xihao = xihao;
}
public Flower() {
super();
// TODO Auto-generated constructor stub
}
public Flower(int kongjian, int xihao) {
super();
this.kongjian = kongjian;
this.xihao = xihao;
}
@Override
public String toString() {
return "Flower [kongjian=" + kongjian + ", xihao=" + xihao + "]";
}
@Override
public int compareTo(Flower f) {
if(this.kongjian*1.0/this.xihao>f.kongjian*1.0/f.xihao){
return 1;
}else if(this.kongjian*1.0/this.xihao==f.kongjian*1.0/f.xihao){
return 0;
}else{
return -1;
}
}
}
最后
以上就是奋斗画板最近收集整理的关于生日购物(贪心算法)的全部内容,更多相关生日购物(贪心算法)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复