【发布时间】:2023-11-29 23:29:01
【问题描述】:
在给定一定的budget 和组合的最大限制的情况下,我希望最大化stars 的数量...
示例问题:
预算为 500 欧元,仅访问最多允许或更少的餐厅,用餐并收集尽可能多的星星。
我正在寻找一种高效的算法,它可能会处理 100 万个 Restaurant 实例,最多可处理 10 个 maxRestaurants...
谁能帮忙解决这个问题?
注意:这不是家庭作业。我故意将尝试留空,因为我不想影响解决方案的效率
Restaurant.java
public class Restaurant {
double cost;
int stars;
public Restaurant(double cost, int stars) {
this.cost = cost;
this.stars = stars;
}
}
Main.java
import java.util.List;
import java.util.Arrays;
class Main {
public static void main(String[] args) {
Restaurant r1 = new Restaurant(100.0, 5);
Restaurant r2 = new Restaurant(20.0, 1);
Restaurant r3 = new Restaurant(75.0, 3);
Restaurant r4 = new Restaurant(125.0, 4);
Restaurant r5 = new Restaurant(60.0, 2);
Restaurant r6 = new Restaurant(80.0, 4);
Restaurant r7 = new Restaurant(40.0, 1);
Restaurant r8 = new Restaurant(200.0, 3);
Restaurant r9 = new Restaurant(120.0, 3);
Restaurant r10 = new Restaurant(50.0, 2);
List<Restaurant> restaurants =
Arrays.asList(r1, r2, r3, r4, r5, r6, r7, r8, r9, r10);
double budget;
int maxRestaurants;
budget = 500.0;
maxRestaurants = 1;
// { r1 } -- 5 stars
budget = 200;
maxRestaurants = 2;
// { r1, r6 } -- 9 stars
budget = 500;
maxRestaurants = 5;
// { r1, r4, r6, r3, r9 } -- 19 stars
budget = 200;
maxRestaurants = 10;
// { r1, r6, r2 } -- 10 stars
}
}
【问题讨论】:
-
如果在预算范围内,您可以按
stars/cost的顺序对列表进行排序,并在您的结果中使用它们 -
这实际上是我起草潜在评论输出的方式......有趣的是,我从未真正想过以这种方式实施解决方案。谢谢!
-
嘿@bohemian,我已经尝试过(使用Python,因为它更容易)并在这里重新发布了这个问题:*.com/questions/59094139/…如果你看这里,解决方案有问题:@ 987654322@ - 不知道你能不能看一下?问题是,基于星数/成本,顺序意味着一旦添加了一些值,较大的值可能会超过预算限制,即使它们本来是最佳解决方案(在示例中 100 是 5 星)跨度>
-
首先,我的建议可能找不到最佳解决方案,但它要简单得多,并且可能会找到一个可以接受的好解决方案。现在您可以通过首先比较星数/成本来优化排序顺序,如果该值相等,则首先按最大星数排序。
标签: java algorithm search time-complexity combinations