php實現稱砝碼的方法介紹

來源:互聯網
上載者:User

php實現 稱砝碼(背包)

一、總結

一句話總結:

1、dp的實質是什嗎?

刷表啊,用空間換時間

把表畫出來會做得更快

13 //動態規劃就是一個表14 //至於這個表的更新就是上面層的表更新下面層的,是逐級更新還是跳級更新要注意15 //把表畫出來做的更快

2、dp的初始狀態怎麼得到(其實可以最開始想到的就是用所求做狀態)?

其實可以最開始想到的就是用所求做狀態

 4 //dp就是思考變數(然後變數組合成初始狀態):變數有用幾種砝碼,每種砝碼有多少個,重量為多少

3、dp的狀態轉移方程怎麼得到?

用不同的初始狀態去試

一維不行就加到二維,二維不行就加到3維

4、這裡又忘記初始化中間數組了(在不同的組資料之間)?

26     $dp=null;27     $dp[0]=1;

二、稱砝碼(背包)

題目描述

現有一組砝碼,重量互不相等,分別為m1,m2,m3…mn;
每種砝碼對應的數量為x1,x2,x3...xn。現在要用這些砝碼去稱物體的重量,問能稱出多少中不同的重量。

註:

稱重重量包括0

方法原型:public static int fama(int n, int[] weight, int[] nums)

輸入描述:

輸入包含多組測試資料。對於每組測試資料:第一行:n --- 砝碼數(範圍[1,10])第二行:m1 m2 m3 ... mn --- 每個砝碼的重量(範圍[1,2000])第三行:x1 x2 x3 .... xn --- 每個砝碼的數量(範圍[1,6])

輸出描述:

利用給定的砝碼可以稱出的不同的重量數

樣本1

輸入

21 22 1

輸出

5

代碼:

 1 <?php  2 //php本身是桶,所以這裡用重量來做dp是可以的  3 //初始狀態  最終狀態  狀態轉移方程  4 //dp就是思考變數(然後變數組合成初始狀態):變數有用幾種砝碼,每種砝碼有多少個,重量為多少  5 //f[i][j]表示用了第i種砝碼用了j個所能達到的重量  6 //dp方程為:f[i+1][]=f[i][j]+  7   8 //f[i][j]表示前i種物品能否達到j重量  9 //f[i][j]=(或者關係)第i件物品取0到n(i)件能夠達到 10 //f[i-1][j]||(取)f[i-1][j]+k*wi[k 0->ni] 11 //f[i][j][k]表示前i種物品取j件能否達到k重量 12  13 //動態規劃就是一個表 14 //至於這個表的更新就是上面層的表更新下面層的,是逐級更新還是跳級更新要注意 15 //把表畫出來做的更快 16 while($n=trim(fgets(STDIN))){ 17     $w=trim(fgets(STDIN)); 18     $num=trim(fgets(STDIN)); 19     $w=explode(' ',$w); 20     $num=explode(' ',$num); 21     $total=10; 22     for($i=0;$i<$n;$i++){ 23         $total+=$w[$i]*$num[$i]; 24     } 25  26     $dp=null; 27     $dp[0]=1; 28     for($i=1;$i<=$n;$i++){ 29         for($j=$total;$j>=0;$j--){ 30             for($k=0;$k<=$num[$i-1];$k++){ 31                 if($j-$k*$w[$i-1]>=0&&$dp[$j-$k*$w[$i-1]]){ 32                     $dp[$j]=1; 33                     break; 34                 } 35             }36         }37     }38     echo count($dp).PHP_EOL;39     //print_r($w);40     //print_r($num);41 42 }43 ?>

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.