gpt4 book ai didi

C# - 组合学

转载 作者:行者123 更新时间:2023-11-30 16:49:40 24 4
gpt4 key购买 nike

我有一个大约 300 个对象的列表,它们都有价格和分数。我需要找到总价小于 X 的 15 个对象的最佳组合(即最高总分)。

在我看来,最直接的方法是嵌套 15 个 for 循环并检查每个可能的组合,但这需要几天的时间。

在 C# 中是否有任何“干净”的方法来执行此操作?

谢谢!

最佳答案

没有示例很难提供帮助,但如果我理解了问题,那么这可能会有所帮助。

假设你的对象看起来像这样

public class Item
{
public int Score { get; set; }
public decimal Price { get; set; }
}

那么下面的内容应该可以解决您的问题。

var listOfObjects = new List<Item>();

var topItems = listOfObjects.Where(p => p.Price < 100).OrderByDescending(p => p.Score).Take(15);

编辑:在披露所有细节后,以下内容应该有所帮助

免责声明:快速而肮脏的解决方案(次优)

创建一个新类

public class ItemWithRunningTotal
{
public Item Item { get; set; }
public decimal RunningTotal { get; set; }
}

那么以下内容应该可以满足您的需求。

var maxTotal = 1500; //for you 8000
var objects = new List<Item>()
{
new Item() {Score = 10, Price = 100},
new Item() {Score = 20, Price = 800},
new Item() {Score = 40, Price = 600},
new Item() {Score = 5, Price = 300},
};

decimal runningTotal = 0;
var newList = objects
.OrderByDescending(p => p.Score)
.Select(p =>
{
runningTotal = runningTotal + p.Price;
return new ItemWithRunningTotal()
{
Item = p,
RunningTotal = runningTotal
};
})
.OrderByDescending(p => p.RunningTotal)
.Where(p => p.RunningTotal <= maxTotal).Take(15);

关于C# - 组合学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com