主頁 > 知識庫 > php回溯算法計算組合總和的實例代碼

php回溯算法計算組合總和的實例代碼

熱門標簽:天津電銷外呼系統(tǒng)違法嗎 滄州電銷外呼系統(tǒng)價格 凱立德地鐵站地圖標注 上海400客服電話怎么申請 手機外呼系統(tǒng)什么原理 銀行信貸電話機器人 400電話個人能不能辦理 合肥ai電銷機器人費用 溫州外呼系統(tǒng)招商

給定一個數(shù)組 candidates 和一個目標數(shù) target ,找出 candidates 中所有可以使數(shù)字和為 target 的組合。

candidates 中的每個數(shù)字在每個組合中只能使用一次。

說明

所有數(shù)字(包括目標數(shù))都是正整數(shù)。 解集不能包含重復的組合。

實例

輸入:

candidates = [10,1,2,7,6,1,5], target = 8,

所求解集為:

[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]]

解題思路

直接參考回溯算法團滅排列/組合/子集問題。

代碼

class Solution {
    /** * @param Integer[] $candidates * @param Integer $target * @return Integer[][] */
    public $res = [];
    function combinationSum2($candidates, $target) {
        sort($candidates);   // 排序
        $this->dfs([], $candidates, $target, 0);
        return $this->res;
    }
    function dfs($array, $candidates, $target, $start) {
        if ($target  0) return;
        if ($target === 0) {
            $this->res[] = $array;
            return;
        }
        $count = count($candidates);
        for ($i = $start; $i  $count; $i++) {
            if ($i !== $start  $candidates[$i] === $candidates[$i - 1]) continue;
            $array[] = $candidates[$i];
            $this->dfs($array, $candidates, $target - $candidates[$i], $i + 1);//數(shù)字不能重復使用,需要+1
            array_pop($array);
    }}

實例擴展:

?php
/*
 * k = 2x + y + 1/2z
 取值范圍
 * 0 = x = 1/2k
 * 0 = y = k
 * 0 = z  = 2k
 * x,y,z最大值 2k
 */
$daMi = 100;
$result = array();
function isOk($t,$daMi,$result)
{/*{{{*/
 $total = 0;
 $hash = array();
 $hash[1] = 2;
 $hash[2] = 1;
 $hash[3] = 0.5;
 for($i=1;$i=$t;$i++)
 {
 $total += $result[$i] * $hash[$i];
 }
 if( $total = $daMi)
 {
 return true;
 }
 return false;
}/*}}}*/
function backtrack($t,$daMi,$result)
{/*{{{*/
 //遞歸出口
 if($t > 3)
 {
 //輸出最優(yōu)解
 if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3]))
 {
  echo "最優(yōu)解,大米:${daMi},大牛:$result[1],中牛: $result[2],小牛:$result[3]\n";
 }
 return;
 }
 for($i = 0;$i = 2 * $daMi;$i++)
 {
 $result[$t] = $i;
 //剪枝
 if(isOk($t,$daMi,$result))
 {
  backtrack($t+1,$daMi,$result);
 }
 $result[$t] = 0;
 }
}/*}}}*/
backtrack(1,$daMi,$result);
?>

到此這篇關于php回溯算法計算組合總和的實例代碼的文章就介紹到這了,更多相關php回溯算法計算組合總和的方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PHP基于回溯算法解決n皇后問題的方法示例
  • PHP實現(xiàn)的回溯算法示例

標簽:白城 七臺河 洛陽 溫州 赤峰 怒江 酒泉 金華

巨人網(wǎng)絡通訊聲明:本文標題《php回溯算法計算組合總和的實例代碼》,本文關鍵詞  php,回溯,算法,計算,組合,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php回溯算法計算組合總和的實例代碼》相關的同類信息!
  • 本頁收集關于php回溯算法計算組合總和的實例代碼的相關信息資訊供網(wǎng)民參考!
  • 推薦文章