duanlu0075 2015-06-30 13:12
浏览 11
已采纳

确定数组中值的最大部分以匹配给定值

I have an array with values:

$values = array(
    2,
    4,
    7.5,
    9
);

And i have a separate value:

$total = 12;

What's the correct mathematical approach to pick out values from $values, with the greater values coming first and the lesser values coming last, until the value of $total is reached or closely approached, but never exceeded?

I am aware that this is a basic mathematical problem, but i am pretty incapable of maths, and i have no idea how to accomplish this.

  • 写回答

3条回答 默认 最新

  • doubi2228 2015-06-30 14:05
    关注

    Ironically, i ended up with a fairly compact piece of code, which beautifully solves the problem - and proves that this is not the knapsack problem per sé.

    $total = 7.9;
    $values = array(2, 2.5, 5, 8);
    $computed = 0;
    
    rsort($values);
    
    foreach($values as $val) {
        if($val + $computed > $total)
            continue;
        $computed += $val;
    }
    

    That's it.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog