動態規劃 背包九講的實現。

最近在學習動態規劃,會了不少基礎的之后就開始挑戰比較困難的背包問題了,我這里自己寫了每一講的問題,解析,代碼,注釋。如果dp還沒入門的孩紙就去看看我的另一篇文章http://www.cnblogs.com/luyi14/p/4344946.html ? ?

第一講 ?0 ?1 ?背包

題目:

有N件物品和一個容量為V的背包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總和最大。

解析:

最基礎。

狀態:0不裝1裝,是0 1 背包

轉移方程:f[i][v] = max (f[i][v],f[i-1][v-c[i]]+w[i]);

一開始都看不懂這是什么玩意。變成一維的會好理解一點。看代碼:

 1 #include<stdio.h>
 2 #define max(a,b) a>b?a:b
 3 int main()
 4 {
 5     int v,n;
 6     while(~scanf("%d%d",&v,&n))
 7     {
 8         int c[101]={0},w[101]={0},f[1001]={0},i,j,k;
 9         //這里定義初始值也是為了解決另一種問題就是恰好裝滿背包
10         //初始值就是除了f【0】=0.別的均-無窮就好
11         //已經不用吧背包裝滿。就如上代碼
12         for(i = 1 ; i <= n ; i ++)
13             scanf("%d%d",&c[i],&w[i]);
14         for(i = 1 ; i <= n ; i++)
15             //
16             for(j = v;j >= c[i]; j--)
17         //優化 后面獲得的數值不會影響到前面的這是肯定的、
18                 f[j] = max(f[j],f[j-c[i]]+w[i]);
19         //等于轉移方程 f[v] = max(f[i-1][v],f[i-1][v-c[i]);
20         printf("%d\n",f[v]);
21     }
22     return 0;
23 }

稍微先看看代碼再來看解析:

剛才的方程式非常重要建議要徹底理解,將前i 件物品放入容量為v 的背包中,這個子問題,如果只考慮第i件物品 的策略 (0 1)那么問題就簡化為前i -1 件物品放入的問題,(這里算是遞歸的思路吧不斷縮短)前i - 1個物體放入剩下容量為 v - c【i】 的背包中 ?這時候的最大價值就是

f[i][v-c[i]] 加上第i件物品的價值w[i];

這個確實很難理解。看看一維的代碼吧。

for i=1..N

??? for v=V..0

??????? f[v]=max{f[v],f[v-c[i]]+w[i]};

這里就是用f【】來保存每一個物品放不放所導致的結果,

話就不多說了。還是自己把過程模擬一遍,才能真正去理解算法中精妙的dp吧。

?

轉載于:https://www.cnblogs.com/luyi14/p/4358930.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273348.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux中查看負載

行車過橋 一只單核的處理器可以形象得比喻成一條單車道。設想下&#xff0c;你現在需要收取這條道路的過橋 費 — 忙于處理那些將要過橋的車輛。你首先當然需要了解些信息&#xff0c;例如車輛的載重、以及 還有多少車輛正在等待過橋。如果前面沒有車輛在等待&#xff0c;那么你…

flask小demo-數據查詢

mysqlconn-flask.py 1 # -*- coding: utf-8 -*-2 #codingutf-83 4 import os5 import mysql.connector6 from flask import Flask, request, render_template7 8 app Flask(__name__)9 10 def db(): 11 # 注意把password設為你的root口令: 12 conn mysql.connect…

js實現的文件下載

/** * Javascript 多文件下載 * author Barret Lee * email barret.chinagmail.com */var Downer (function(files) { var h5Down !/Trident|MSIE/.test(navigator.userAgent); // try{ // h5Down document.createElement("a").hasOwnProperty("download&quo…

Jersey注解詳解

REST 在 2000 年由 Roy Fielding 在博士論文中提出&#xff0c;他是 HTTP 規范 1.0 和 1.1 版的首席作者之一。 REST 中最重要的概念是資源&#xff08;resources&#xff09;&#xff0c;使用全球 ID&#xff08;通常使用 URI&#xff09;標識。客戶端應用程序使用 HTTP 方法&…

Struts2配置文件詳解

解決在斷網環境下,配置文件無提示的問題我們可以看到Struts.xml在斷網的情況下,前面有一個嘆號,這時,我們按alt/ 沒有提示,這是因為” http://struts.apache.org/dtds/struts-2.0.dtd”是一個網絡地址,如果上網的話,IDE會自動幫我們下載此文件,如果斷網就沒有辦法了,但是我們還…

mysql插入圖片數據

import java.sql.*; import java.util.Scanner; import java.io.*; public class mysql插入圖片 { private static final File File null;private static String String;public static Connection getConn() { Connection conn null; try { Class.forName("com.…

mybatis插入圖片處理--mysql

1. 數據庫Scheme 1.數據庫SchemeDROP TABLE IF EXISTS user_graphic_t; /*!40101 SET saved_cs_client character_set_client */; /*!40101 SET character_set_client utf8 */; CREATE TABLE user_graphic_t ( id int(11) NOT NULL AUTO_INCREMENT, graph…

careercup-高等難度 18.6

18.6 設計一個算法&#xff0c;給定10億個數字&#xff0c;找出最小的100萬個數字。假定計算機內存足以容納全部10億個數字。 解法&#xff1a; 方法1&#xff1a;排序 按升序排序所有的元素&#xff0c;然后取出前100萬個數&#xff0c;時間復雜度為O(nlog(n)) 方法2&#xff…

不浮躁的社會是什么樣的?

不浮躁就是該吃飯吃飯&#xff0c;該睡覺睡覺。該看書看書&#xff0c;該洗澡洗澡。聊事時聊事&#xff0c;陪朋友時陪朋友。萬事各得其所&#xff0c;各安其分&#xff0c;專心在此時此刻&#xff0c;做每一件事。而不是吃飯時想著別人的魚翅海參&#xff0c;睡覺時想著發票報…

java jre 中導入導出證書

導入證書&#xff1a; 將所要導入的證書放到Javahome的jre/lib/security文件夾中 運行命令jre/bin/keytool-import -alias cacerts -keystore cacerts -file 證書名稱 輸入默認密碼&#xff1a;changeit 導入過程中會交互詢問是否信任該證書&#xff0c;輸入 yes 導出證書 …

各種類庫網址學習

http://shouce.jb51.net/net/index.html轉載于:https://www.cnblogs.com/chenls/p/4362730.html

圖片的base64編碼實現以及網頁上顯示

生成、解析base64編碼的圖片 //圖片轉化成base64字符串 public static String GetImageStr(<span style"font-family: Arial, Helvetica, sans-serif;">String imgFile</span><span style"font-family: Arial, Helvetica, sans-serif;">…

nginx windows 下安裝和配置

去nginx官網下載相應的版本 下載地址&#xff1a;http://nginx.org/download/nginx-1.6.2.zip 下載完成解壓放到你喜歡的目錄下&#xff1b;樓主的放到了F:\nginx 進入windows的cmd窗口&#xff0c;輸入如下所示的命令&#xff1a; C:\Users\YiXian>F: F:\>cd nginx s…

c/c++學習書籍

一、c Primer . 目錄內容關鍵字第一章 面向過程編程&#xff0c;面向對象編程&#xff0c;泛型 轉載于:https://www.cnblogs.com/bzsh/p/4362930.html

applicationContext.xml 配置文件的存放位置

web.xml中classpath:和classpath*: 有什么區別? classpath&#xff1a;只會到你的class路徑中查找找文件; classpath*&#xff1a;不僅包含class路徑&#xff0c;還包括jar文件中(class路徑)進行查找. 存放位置&#xff1a; 1&#xff1a;src下面 需要在web.xml中定義如下&…

完美攻略心得之圣魔大戰3(Castle Fantisia)艾倫希亞戰記(艾倫西亞戰記)包含重做版(即新艾倫希亞戰記)...

&#xff08;城堡幻想曲3&#xff0c;糾正大家個錯誤哦&#xff0c;不是圣魔大戰3&#xff0c;圣魔大戰是城堡幻想曲2&#xff0c;圣魔大戰不是個系列,艾倫西亞戰記艾倫希亞戰記,一個游戲日文名&#xff1a;タイトル キャッスルファンタジア &#xff5e;エレンシア戦記&#x…

費波納茨

//非遞歸實現static int[] fun(int num){int result[] new int[num];for (int i 1; i < num; i) {if(i<3){result[i-1]i-1;}else{result[i-1]result[i-2]result[i-3];}}return result;} //遞歸實現static int method(int num){int result 0;if(num < 2){result --n…

Hadoop生態上幾個技術的關系與區別:hive、pig、hbase 關系與區別

初接觸Hadoop技術的朋友肯定會對它體系下寄生的個個開源項目糊涂了&#xff0c;我敢保證Hive,Pig,HBase這些開源技術會把你搞的有些糊涂&#xff0c;不要緊糊涂的不止你一個&#xff0c;如某個菜鳥的帖子的疑問&#xff0c;when to use Hbase and when to use Hive&#xff1f;…

可變形參

public class TestVarargs {/*** param args* YiXian* 2015-3-11*/public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("the program starting>>>>>>>>>>>");test(2,"java權威指…

解決android中Layout文件下的xml文件配好后,R類中不能自動生成相應代碼

不能更新的原因: 1.在xml文件中代碼錯誤或者格式錯誤 2.eclipse 編譯器是老版本 3.布局文件的文件名有大寫字母 4.含有相同文件名、格式的xml文件解決方法: 1.找到出錯的xml文件中的錯誤代碼格式改正&#xff0c;并執行project —clean 操作 2.eclipse 選擇Project--Bu…