日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码

發(fā)布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近面試經(jīng)常被問到動態(tài)規(guī)劃,所以自己做了一個總結(jié),希望能進行深入的理解然后嘗試能不能找到通用的解決手段。我覺得動態(tài)規(guī)劃思想好理解,難的是怎么找出全部并且合理的子問題和出口。

我一般把問題分為兩類,一類是有兩個變化值,對應(yīng)的我們要設(shè)一個二維數(shù)組記錄(比如背包問題,每一步不僅物品發(fā)生變化,背包容量也改變);一類是一個變化值,對應(yīng)的我們只需設(shè)置一個一維數(shù)組(比如只有一個變量改變的最值問題)。

然后確定該問題的子問題,找出狀態(tài)轉(zhuǎn)移方程。這里有一個小技巧,一般都是從數(shù)組最后一個元素開始逐步向前遞歸(思考方式也就是從最后一個開始思考),然后找遞歸出口即可。

從0-1背包問題說起:

一個背包總?cè)萘繛閃, 現(xiàn)在有N個物品, 第i個物品容量為w[i], 價值為v[i], 物品只能取或不取,現(xiàn)在往背包里面裝東西, 怎樣裝才能使背包內(nèi)物品總價值最大?

首先我們看到每一次選取,物品個數(shù)和背包容量都會發(fā)生變化,所以考慮設(shè)一個二維數(shù)組B[i][j],表示i個物品和容量為j的背包的問題,然后找它的子問題:

1 第i個體積太大,放不進去 W不變,i變?yōu)閕-1。問題轉(zhuǎn)化為i-1個物品和容量為W背包的問題

2 第i個體積不大,可以放進去

  (1)放進去 ? ?W變?yōu)閃-w[i],i變?yōu)閕-1 問題轉(zhuǎn)化為i-1個物品和容量為W-w[i]背包的問題

  (2)不放進去 W不變 i變?yōu)閕-1 ?問題轉(zhuǎn)化為i-1個物品和容量為W背包的問題

除此以外應(yīng)該沒有其他可能了,所以我們找出了所有的子問題

寫出c代碼

#include<stdio.h> #include <stdlib.h> int B[6][20]; int w[6] = { 0, 2, 3, 4, 5, 9 }; int v[6] = { 0, 3, 4, 5, 8, 10 };int bag(int n, int W){if (n == 0 || W == 0){return 0;}else{if (w[n] > W){return bag(n - 1, W);}else{return (bag(n - 1, W - w[n]) + v[n]) > bag(n - 1, W) ? (bag(n - 1, W - w[n]) + v[n]) : bag(n - 1, W);}} }int main() {printf("hello world!\n");printf("%d", bag(6, 20));system("pause");return 0; }

  

?

接下來再來一個一維數(shù)組的:

從一個序列中選出互不相鄰的幾個數(shù),是它們的累加和最大。比如[3,2,1,9,4,2]最大的就是3+9+2=14

求解:

可以看到,每選一個數(shù),這個序列就會改變一次(因為不能再選與被選數(shù)相鄰的),不存在其他變量,所以我們設(shè)一個一維數(shù)組num[i],i表示長度為i的數(shù)組(也可以說最后元素下標為i的數(shù)組)能選出的最大累加和,設(shè)第i個的值為v[i]。

然后找它的子問題:

1 選擇第i個 ?因為不能選擇第i-1個數(shù),所以問題轉(zhuǎn)化為長度為i-2的數(shù)組+v[i]的子問題

2 不選擇第i個,問題轉(zhuǎn)化為長度為i-1的數(shù)組的子問題

我們只要找出兩者最大即可

代碼:

#include<stdio.h> #include <stdlib.h> int v[6] = { 3, 2, 1, 9, 4, 2 };int add(int *value,int N){if (N == 0){return 0;}else if (N == 1){return value[0];}else{return add(value, N - 1) > (add(value, N - 2) + value[N - 1]) ? add(value, N - 1):(add(value, N - 2) + value[N - 1]);} }int main() {printf("%d", add(v,6));system("pause");return 0; }

  這兩個還是比較簡單的,但是我希望能從簡單問題找出通用套路。如果大家有其他的更好的思路可以給我留言。

?

轉(zhuǎn)載于:https://www.cnblogs.com/dylan9/p/8723474.html

總結(jié)

以上是生活随笔為你收集整理的两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热影院| 国产激情视频网站 | 狂野欧美性猛交xxⅹ李丽珍 | 精品国精品国产 | 国产精品爱啪在线线免费观看 | 无码人妻一区二区三区在线视频 | 天天cao在线| 亚州av影院 | 欧美精品色哟哟 | 欧美爱爱视频 | 九一九色国产 | 九九热这里只有精品6 | 国产三级国产精品国产专区50 | 日日影院| 国产精品亚洲欧美在线播放 | 久久精品色妇熟妇丰满人妻 | 亚洲涩涩涩 | 深夜国产在线 | 久久福利片| 韩国三级久久 | 国产一级二级三级视频 | 日韩欧美成人精品 | 国产一级久久 | 警察高h荡肉呻吟男男 | 中文字幕天堂网 | 日韩人妻精品在线 | 久久对白| 久久男女 | 精品国产露脸精彩对白 | 亚洲色图国产视频 | 懂色一区二区二区av免费观看 | 国产精品国产一区二区三区四区 | 99在线无码精品入口 | 午夜国产一区 | 在线观看亚洲天堂 | 一区二区成人免费视频 | 永久视频 | 日本在线视频免费观看 | 久久五 | 香蕉视频久久 | 9i免费看片黄 | 一区二区三区www污污污网站 | 久久99国产精品成人 | 国产古装艳史毛片hd | 午夜777| 亚洲美女自拍 | 精品二区在线观看 | 欧美绿帽合集videosex | 麻豆国产精品一区 | 欧美一级黄 | 久久婷婷综合色丁香五月 | 欧美xo影院 | 欧美激情一区二区三区免费观看 | 草久av| 久久亚洲成人 | 综合久久亚洲 | 涩涩涩涩av | 三上悠亚ed2k| 欧美日韩在线视频一区 | 华人永久免费 | 午夜精品视频一区 | 色 综合 欧美 亚洲 国产 | 91大神久久| 国产婷婷色一区二区在线观看 | 精品一区二区三区免费看 | 国产精品玖玖玖 | 色综合中文 | 综合久久五月 | 美国色综合 | 午夜福利电影一区二区 | 嫩草天堂 | 青青伊人网| 噼里啪啦动漫高清在线观看 | 老司机精品视频在线 | 亚洲人成亚洲人成在线观看 | 日韩精品一区二区亚洲av观看 | 一区二区三区四区国产精品 | yy色综合 | 欧美大尺度视频 | 99蜜桃臀久久久欧美精品网站 | av黄色一级片 | 日本综合色 | 制服诱惑一区二区三区 | 色爱视频| 曰批免费视频播放免费 | 免费网站污 | a级片免费观看 | 日韩欧美毛片 | 夜夜撸影院 | 一本久道久久综合 | 欧美日韩精品一区二区三区 | 免费午夜视频 | 国产午夜精品久久久久久久 | 日本中文字幕在线观看视频 | av黄色在线看 | 麻豆av一区二区三区 | 日本色www | 日韩精品一区二区三 | 看黄色一级 |