91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php回溯算法計算組合總和的方法

發布時間:2022-03-25 11:10:26 來源:億速云 閱讀:156 作者:iii 欄目:web開發

本文小編為大家詳細介紹“php回溯算法計算組合總和的方法”,內容詳細,步驟清晰,細節處理妥當,希望這篇“php回溯算法計算組合總和的方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

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

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

說明

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

實例

輸入:

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);//數字不能重復使用,需要+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)
 {
 //輸出最優解
 if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3]))
 {
  echo "最優解,大米:${daMi},大牛:$result[1],中牛: $result[2],小牛:$result[3]
";
 }
 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回溯算法計算組合總和的方法”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

四会市| 晋宁县| 通江县| 英吉沙县| 阿尔山市| 通州市| 建阳市| 南漳县| 田阳县| 西林县| 固始县| 遂平县| 平阳县| 怀远县| 密山市| 嘉峪关市| 莱阳市| 名山县| 天气| 保定市| 汝阳县| 越西县| 武功县| 江山市| 贵溪市| 昌乐县| 德钦县| 牟定县| 华安县| 乌拉特前旗| 开阳县| 郑州市| 前郭尔| 巴塘县| 沈阳市| 南充市| 嘉善县| 合水县| 舞钢市| 大荔县| 包头市|