Php 如何从数组中获取匹配的所有值并获取剩余值
我的问题的参考Php 如何从数组中获取匹配的所有值并获取剩余值,php,arrays,Php,Arrays,我的问题的参考 //输入 所需费用=1.3美元; $array_result=[0.6,0.5,0.8,0.7]; //算法 $剩余=$所需; $whichtakes=[]; foreach($i=>a的数组结果){ foreach(数组\u切片($array\u result,$i+1)为$b){ $test=$required-$a-$b; 如果($test>=0和$test
//输入
所需费用=1.3美元;
$array_result=[0.6,0.5,0.8,0.7];
//算法
$剩余=$所需;
$whichtakes=[];
foreach($i=>a的数组结果){
foreach(数组\u切片($array\u result,$i+1)为$b){
$test=$required-$a-$b;
如果($test>=0和$test<$剩余){
$剩余=$测试;
$whichtakes=[$a,$b];
}
}
}
//输出
打印($whichtakes);//[0.5, 0.8]
打印(剩余);//0
多亏了特林科特
它可以很好地处理对,但变化不大,算法得到对,但我想要匹配结果数组的数组,只需要这一点变化。如果$required=1.3改为$required=1.8,现在它应该给我数组0.6,0.5,0.7,如果$required=1.9,现在它应该给我数组0.6,0.5,0.7和0.1剩余此算法是动态规划的一部分。这是修改后的代码
$res = array();
function isSubsetSum($set, $n, $sum)
{
if ($sum == 0)
return true;
if ($n == count($set) - 1 && $sum != 0)
return false;
if ($set[$n + 1] > $sum) {
return isSubsetSum($set, $n + 1, $sum);
}
return isSubsetSum($set, $n + 1, $sum) ||
isSubsetSum($set, $n + 1, $sum - $set[$n + 1]);
}
$set = array(0.6, 0.5, 0.8, 0.7);
$sum = 1.8;
$n = 0;
$remaining = 0;
while (!isSubsetSum($set, 0, $sum)) {
$remaining += 0.1;
$sum -= 0.1;
}
echo $res; // the array result
echo $remaining;
此代码不存储数组子集。可以将数组结果存储在函数中。但我不知道如何优化这个算法
有关动态编程的更多信息,请选中此复选框我想当您更改
$required
值时,输出可能与预期不符。是的,这就是为什么需要更改此算法错误:类型1—超过30秒的最长执行时间—在第7行
$res = array();
function isSubsetSum($set, $n, $sum)
{
if ($sum == 0)
return true;
if ($n == count($set) - 1 && $sum != 0)
return false;
if ($set[$n + 1] > $sum) {
return isSubsetSum($set, $n + 1, $sum);
}
return isSubsetSum($set, $n + 1, $sum) ||
isSubsetSum($set, $n + 1, $sum - $set[$n + 1]);
}
$set = array(0.6, 0.5, 0.8, 0.7);
$sum = 1.8;
$n = 0;
$remaining = 0;
while (!isSubsetSum($set, 0, $sum)) {
$remaining += 0.1;
$sum -= 0.1;
}
echo $res; // the array result
echo $remaining;