我需要这样的东西:算法选择球员与最大点,但在给定的成本
我理解背包的概念,我已经做了一个算法,使用0/1网格系统给出了最优解。问题是我没有弄清楚如何实施这些限制,我所说的限制是指每个位置只有X名球员。我不太明白阿米特在上面的链接中给出的答案。如果你能给我一些启发,那就太棒了。
提前感谢,抱歉我的英语。
编辑:很抱歉信息不足。这是我的第一个问题:)
以下是我到目前为止所做的。
$all_players = array();
foreach ($arr_players as $value) {
$all_players[] = array( "name" => $value['name'],
"position" => $value['position'],
"salary" => $value['salary'],
"score" => $value['score']
);
} // array sorted by salary
$total_players = count($all_players);
$salary_cap = 601;
// using the knapsack 0/1 grid method
for ($x = 0; $x < $total_players; $x++) {
for ($y = 1; $y < $salary_cap; $y++) {
if ($x == 0) {
$score_arr[$x][$y] = 0;
$keep_arr[$x][$y] = 0;
} else {
if ($all_players[$x]['salary'] <= $y) {
$arr_pos = $x - 1;
$salary_left = $y - $all_players[$x]['salary'];
if ($all_players[$x]['salary'] == $y) {
$score_pres = $all_players[$x]['score'];
} else {
$score_pres = $all_players[$x]['score'] + $score_arr[$arr_pos][$salary_left];
}
$score_prev = $score_arr[$arr_pos][$y];
if ($score_pres > $score_prev) {
$score_arr[$x][$y] = $score_pres;
$keep_arr[$x][$y] = 1;
} else {
$score_arr[$x][$y] = $score_prev;
$keep_arr[$x][$y] = 0;
}
} else {
$score_arr[$x][$y] = 0;
$keep_arr[$x][$y] = 0;
}
}
}
}
$total_players = $total_players - 1;
$salary_left = 600;
$best_lineup = array();
//
for ($x = $total_players; $x > -1; $x--) {
if ($keep_arr[$x][$salary_left] == 1) {
$best_lineup[] = $all_players[$x]['name'];
$salary_left = $salary_left - $all_players[$x]['salary'];
}
}
/////////////////////////////////////////////////
/*
The output:
Array
(
[0] => Ramon Sessions // PG
[1] => Omri Casspi // SF
[2] => D.J. Augustin // PG
[3] => Steven Adams // C
[4] => Zach LaVine // PG
[5] => Kris Humphries // PF
[6] => Isaiah Canaan // PG
[7] => Corey Brewer // SF
[8] => Rodney Stuckey // SG
[9] => O.J. Mayo // SG
[10] => Greg Monroe // PF
[11] => DeMarcus Cousins // C
)
*/
现在我需要限制这个阵型,每个位置(PG、SG、SF、PF)只有2名球员,C位置只有1名球员,以获得最佳的9人阵容。
// team position with wanted amount of players
$team = array("PG" => 2, "SG" => 2, "SF" => 2, "PF" => 2, "C" => 1);
$x = $total_players;
$salary_left = 600;
$best_lineup = array();
//
while (--$x > -1) {
if ($keep_arr[$x][$salary_left] == 1) {
$pos = $all_players[$x]['position'];
if ($team[$pos] > 0) {
// we need another player for that pos
$team[$pos]--; // same as $team[$pos] = $team[$pos] -1;
$best_lineup[] = $all_players[$x]['name'];
$salary_left = $salary_left - $all_players[$x]['salary'];
}
}
}
我一直在研究递归,并试图解决背包问题[https://en.wikipedia.org/wiki/Knapsack_problem]。我想出了下面的算法,它工作得很好: 这里奇怪的是,只有当调用初始函数的重量为,并且时,才会出现这种行为。 谢谢, D_Darric
我有以下问题: 有一组项目,每个项目有两个不同的正值a和B。 背包有两个值:totalA和totalB。这是所选项目值A和B的最大和。 我必须找出背包能装的最大物品数是多少。 示例: 输入: 总计A:10,总计B:15 项目1 A:3,B:4 项目2 A: 7,B: 2 项目4 A:2,B:1 项目5 A:4,B:6 输出: 3(项目:2、3、4) 如何使用动态规划来解决此任务?
任务是典型的背包问题。求解时应采用贪婪算法。我设法创建了下面的代码,但它工作得太慢了。你能告诉我怎么加快速度吗?谢谢你。 c是背包的重量限制。n表示价格权重对的数量(这两个数字都是int类型,而不是float)。限制如下:(1)如果在相同重量的元素之间选择,价格最高的元素应该被取;(2)如果在相同价格和相同重量的元素之间选择,第一个输入的元素应该被取。
我对这个问题有点困惑。作为算法帮助我找到最大的利润从袋。但是这个算法并没有告诉我我应该拿哪一个项目会让我的利润最大。例如 n=4项,背包的容量M=8,利润=[15,10,9,5],重量分别为w=[1,5,3,4],当我解决这个问题时,我得到最大的利润为29 这里是解决方案[http://www.mafy.lut.fi/study/DiscreteOpt/DYNKNAP.pdf] 但是我想知道我应该
我在写一个背包问题的代码。有一个有重量容量的背包,你选择一个特定的项目组合,以找到最好的解决方案。我试图随机生成可能的解决方案。因此,我的代码将选择随机数量的随机项(生成一个随机大小的列表),并测试解决方案是否可行(小于容量)或不可行(大于容量)。然而,当我试图把所有物品的总重量和总价值相加时,这个数字是关闭的。比如说,这是每一项的数据。 10 27 72 所以值是不正确的。但我看不出我的代码有什
我无法将scss文件中的图像路径用作具有汇总包的背景 我的汇总配置如下所示。 我试图在scss中添加一个图像路径。 图像路径正在浏览器中添加,但汇总不服务于资源文件夹。附加的斯克雷森霍特 图像应该以圆圈筹码(红色)显示。 我是否在汇总配置中遗漏了任何内容或scss图像使用错误?提前感谢