PHP 0-1背包問題

2020-12-25 峰哥說PHP

0-1背包問題背景

我們有n種物品,物品j的重量為wj,價格為pj。我們假定所有物品的重量和價格都是非負的。背包所能承受的最大重量為W。如果限定每種物品只能選擇0個或1個,則問題稱為0-1背包問題。

背包問題

遞歸算法

假如背包的容量是C=6,物品的體積為w,對應的物品的價值為v。我們從最後一個物品開始,如果它的體積比背包剩餘容量小,它面臨著兩種選擇:1,放進背包;2,不放進背包。

如果它的體積比背包剩餘容量大,那麼就不能放進背包,n往前走。如上圖所示,每個物品都面臨著這種選擇,直到n<0,即沒物品可放。

下面為背包問題的遞歸算法。

遞歸算法的問題是,有好多的重複計算,時間複雜度為2的n次方,n為物品數量。

動態規划算法

動態規劃跟遞歸非常相似,不同的地方在於使用一個數組來記錄已經計算過的,避免重複計算。

在上面代碼中假如4行後就變為動態規劃了,時間複雜度也變為O(n*c)

相關焦點

  • Stitch 0.1.1 發布,PHP 模板引擎
    Stitch 0.1.1 發布了,該版本增加對 PHP 5.2 的支持。Stitch 讓你將 PHP 模板和頁面分開不同的文件保存,然後動態的縫合在一起生成頁面。
  • 從0開始的PHP RASP的學習
    這裡主要有兩個技術問題,一個是如何跟蹤信息流,另一個是如何安全檢查到底是怎樣實現的。有兩個技術思路來解決兩個問題,第一個是動態汙點跟蹤,另一個是基於詞法分析的漏洞檢測。本文用主要分析的是汙點標記的方法。
  • Php常見問題總結
    解決方法:(1)在c盤建立文件夾tmp(2)打開php.ini,找到session.save_path,修改為session.save_path= "c:/tmp"#p#Php部分常見問題總結(二)#e#4:為什麼我向另一網頁傳送變量時,只得到前半部分,以空格開頭的則全部丟失
  • php 弱類型問題
    但由於 php 在定義變量時並不需要像 C++ 語言那樣去定義其變量類型,因此在一些 CTF web 題目中,經常會碰到一些源碼是 php 的題目,我們可以通過分析代碼,結合 php 弱類型問題去嘗試繞過。
  • PHP 循環引用的問題
    問題為了引出問題, 先來看下面一段代碼:<?問題分析再來看下面一段修改過得代碼:<?>$each = '1';var_dump($arr);是不是發現了什麼?其實改變的時arr數組的最後一個元素到此, 流程已經明白了, 下面還原一下最開始的兩次foreach過程:在第一個foreach完成之後, 顯然, each是指向數組的最後一個元素的, 下面進入第二個foreach:第一次遍歷, 將arr[0]
  • Jsonnet-PHP v1.2.0 發布, PHP 支持 Jsonnet 擴展
    Jsonnet-PHP v1.2.0發布了,JsonNet-PHP是Google Jsonnet對PHP的支持擴展,該版本使用最新版本至v0.9.5的LibJsonnet。
  • Python使用貪婪法及其改進算法求解0-1背包問題
    首先按物品單位價值(物品價值/物品重量或體積)降序排序,然後逐個嘗試是否能放進背包而不超過背包容量,直到遇到無法放入背包的物品就結束。遇到放不進背包的物品就跳過去,看看排在後面的單位價值小的物品還有沒有能放進背包的。
  • JavaScript 背包問題詳解
    1.1 問題描述:有${n}$件物品和${1}$個容量為W的背包。每種物品均只有一件,第${i}$件物品的重量為${weights[i]}$,價值為${values[i]}$,求解將哪些物品裝入背包可使價值總和最大。對於一種物品,要麼裝入背包,要麼不裝。所以對於一種物品的裝入狀態只是1或0, 此問題稱為01背包問題。
  • windows 檢查php版本專題及常見問題 - CSDN
    目的:解決用戶在windows環境下運行ngoos2.0的問題。安裝apcu下載php_apcu-5.1.8-7.0-nts-vc14-x86.zip,下載地址:( http://pecl.php.net/package/APCu/5.1.8/windows ),找到php 7.0 7.0 Non
  • 五個常見 PHP 資料庫問題
    本文說明了資料庫設計和訪問資料庫的PHP代碼中出現的五個常見問題,以及在遇到這些問題時如何修復它們。問題1:直接使用MySQL一個常見問題是較老的PHP代碼直接使用mysql_函數來訪問資料庫。清單1展示了如何直接訪問資料庫。
  • PHP 7.1 新特性一覽
    $array = array("a" => 1, "b" => 2, "c" => 3);$array = ["a" => 1, "b" => 2, "c" => 3];引申到另外一個問題上,如果我們要把數組的值賦值給不同的變量,可以通過 list 來實現:<?
  • Robbe-1.6.0 發布 - PHP開源中文分詞擴展, GBK支持
    Robbe-1.6.0:1.更改接口適用Friso-1.6.0。2.修改了UTF-8的測試程序,增加多個配置測試選項,同時增加了GBK測試程序。3.更改了rb_split,可以自定義的返回切分結果的詞條,類別,長度,真實長度,偏移量,詞性(待實現),具體可以參考附件中的robbe.fun.php:$_str = "研究生命起源,robbe高性能php中文分詞組件。"
  • PHP7.0 的新特性
    PHP7.0 的新特性經常會被面試官問到,在平時的項目開發中運用它們也會提升一定的代碼質量和代碼運行性能,可見這個知識點的重要性。不過有很多人都沒有去系統的了解掌握,今天我剛好系統整理了一番分享出來。php declare(strict_types=1)//1:嚴格模式 0:強制模式(默認)classOrderServiceextendsBaseService{...
  • PHP浮點數的一個常見問題的解答
    php $f = 0.58; var_dump(intval($f * 100)); ?>為啥輸出是57啊? PHP的bug麼?我相信有很多的同學有過這樣的疑問, 因為光問我類似問題的人就很多, 更不用說bugs.php.net上經常有人問...
  • PHP 7.4.0 正式發布
    PHP 7.4.0發布了,此版本標誌著PHP 7系列的第四次特性更新。PHP 7.4.0進行了許多改進,並帶來了一些新特性,包括:Typed Properties類型屬性類屬性現在支持類型聲明,以下示例將強制$User-> id只能分配int值,而$User-> name只能分配string值。<?
  • PHP 7.4.0 發布 支持類型聲明
    PHP 7.4.0 發布了,此版本標誌著 PHP 7 系列的第四次特性更新。PHP 7.4.0 進行了許多改進,並帶來了一些新特性,包括:Typed Properties  類型屬性類屬性現在支持類型聲明,以下示例將強制 $User-> id 只能分配 int 值,而 $User-> name 只能分配 string 值。
  • 額,沒想到,背包問題解題也有套路...
    ,也就是考慮將 i - 1 個物品放入背包中,這樣當前問題的解就是之前問題的解:dp[i][j] = dp[i - 1][j]如果背包體積大於第 i 個物品的體積,我們可以考慮將第 i 個物品放入,這個時候我們要和之前的狀態做一個比較,選取最大的方案:dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][
  • 有安全研究者混入了 PHP 8.0 開發組!
    來源 | 代碼審計(ID:white-hat-note)經歷了近半年的alpha版本測試後,PHP在2020年11月26號正式發布了8.0版本:https://www.php.net/releases/8.0/en.php今天我們就來瀏覽一下PHP 8.0中出現的主要特性,以及它給我們安全研究人員帶來的挑戰。
  • 從WordPress SQLi談PHP格式化字符串問題
    所以,payload  %1$'%s'  中的  '%  被視為使用  %  進行 padding,導致了  '  的逃逸。但在測試過程中,還發現其他問題。php的  sprintf  或  vsprintf  函數對格式化的字符類型沒做檢查。
  • PHP擴展開發:[1]簡單的HelloWord
    最近摸索CentOS7.0系統的操作比較多,而php對應的擴展部署加載也用的比較多,但是一直都沒有想去開發一個屬於自己的擴展,剛好最近需要用到這個擴展開發,開發一些小功能,所以就開始著手寫一個比較簡單的HelloWord擴展來記錄下。