日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

动态规划问题之背包模型(18题)

發(fā)布時(shí)間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划问题之背包模型(18题) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背包問題是動(dòng)態(tài)規(guī)劃問題的一大類型,下面我們對(duì)這個(gè)進(jìn)行總結(jié)。
以 Acwing y中總結(jié)的 幾個(gè)類型,我寫了幾個(gè)題解

應(yīng)用知識(shí)點(diǎn)

  • 01背包、完全背包 空間壓縮的寫法
  • 多維費(fèi)用的背包問題,以及狀態(tài)的不同表示對(duì)復(fù)雜度的 影響
  • 完全背包問題的三種求解方法O(NMS),O(NMlogS),O(NM)O(NMS), O(NMlogS),O(NM)O(NMS),O(NMlogS),O(NM)
  • dp維度關(guān)系等于,小于等于,大于等于對(duì)初始化的影響(潛水員)
  • dp關(guān)鍵信息最小值,最大值,方案數(shù)對(duì)初始化的影響

一、采藥

Acwing 題目鏈接
非常裸的 01 背包

#include <bits/stdc++.h> using namespace std;const int N = 1010; int f[N][N]; int n, m;int main() {cin >> m >> n;memset(f, 0, sizeof f);for (int i = 1; i <= n; i ++ ) {static int t, v;scanf("%d%d", &t, &v);for (int j = 0; j <= m; j ++ ) {f[i][j] = f[i - 1][j];if (j >= t) {f[i][j] = max(f[i][j], f[i - 1][j - t] + v);}}}cout << f[n][m] << endl;return 0; }

二、裝箱問題

ACwing 題目鏈接

對(duì)于該問題,我給出兩個(gè)解法(其實(shí)都類似 )


第一種
f[i][j] 表示利用前 i 個(gè)箱子,體積恰好為 j 的方案是否可行,是一個(gè) bool 數(shù)組
那么 f[i][j]=f[i?1][j]∣f[i?1][j?v[i]]f[i][j] = f[i-1][j] | f[i-1][j - v[i]]f[i][j]=f[i?1][j]f[i?1][j?v[i]]
初始化時(shí), f[0][0]f[0][0]f[0][0] 置為 true,其余置為 false
下面是進(jìn)行空間優(yōu)化的寫法

#include <bits/stdc++.h> using namespace std;const int N = 40, M = 40010; int f[M]; int n, m; int cost[N]; // f[i][j] 表示前 i個(gè)物品,體積 恰好等于 j 是否可以 // 然后進(jìn)行狀態(tài)壓縮 int main() {// inputcin >> m >> n;for (int i = 1; i <= n; i ++ )scanf("%d", &cost[i]);f[0] = true;for (int i = 1; i <= n; i ++ ) {for (int j = m; j >= cost[i]; j -- ) {f[j] |= f[j - cost[i]];}}for (int i = m; ; i -- ) {if (f[i]) {cout << m - i << endl;break;}}return 0; }

第二種寫法
f[i][j]f[i][j]f[i][j]表示的是對(duì)前 i 個(gè)箱子,體積小于等于 j 時(shí)候的最大體積
f[i][j]=max(f[i?1][j],f[i?1][j?v[i]]+v[i]f[i][j] =max(f[i-1][j], f[i-1][j-v[i]] + v[i]f[i][j]=max(f[i?1][j],f[i?1][j?v[i]]+v[i]
這樣的話,初始化全部為 0
而且最后輸出結(jié)果也比較簡(jiǎn)單
m?f[n][m]m - f[n][m]m?f[n][m]
下面給出空間優(yōu)化之后的代碼

#include <bits/stdc++.h> using namespace std;const int N = 40010; int f[N]; int n, m; // f[i][j] 表示前 i 個(gè)物品,體積小于等于 j 時(shí)候可以容納的最大體積 // 然后進(jìn)行狀態(tài)壓縮int main() {cin>>m>>n;int v;memset(f, 0, sizeof f);for(int i = 1; i <= n; i++){cin>>v;for(int j = m; j >= v; j--){f[j] = max(f[j], f[j-v]+v);}}cout<<m-f[m]<<endl;return 0; }

三、寵物小精靈值收服

Acwing 題目鏈接


本題是一個(gè)二維費(fèi)用的 01 背包,理解起來不拿,不過題目屬實(shí)有點(diǎn)長(zhǎng),而且 皮卡丘 的血量為 0 也會(huì)抓取失敗,這是一個(gè)比較坑的點(diǎn)
下面,我給出兩個(gè)dp的解決方案


方案一
f[i][j][k]f[i][j][k]f[i][j][k] 表示對(duì)前 i 個(gè)怪獸進(jìn)行遍歷,消耗精靈球數(shù)量小于等于j,消耗血量小于等于 k,的最大抓捕量
f[i][j][k]=max(f[i?1][k][k],f[i?1][j?cost1i][k?cost2i])f[i][j][k] = max(f[i-1][k][k], f[i-1][j-cost1_i][k-cost2_i])f[i][j][k]=max(f[i?1][k][k],f[i?1][j?cost1i?][k?cost2i?])
對(duì)應(yīng)的代碼如下

#include <bits/stdc++.h> using namespace std;const int N = 1010, M = 510, K = 110, INF = 0x3f3f3f3f; int cost1[K], cost2[K], n, m, k; int f[N][M];int main() {// inputcin >> n >> m >> k;m --;for (int i = 1; i <= k; i ++ ) {scanf("%d%d", &cost1[i], &cost2[i]);}for (int i = 1; i <= k; i ++ ) {for (int j = n; j >= cost1[i]; j -- ) {for (int k = m; k >= cost2[i]; k -- ) {f[j][k] = max(f[j][k], f[j - cost1[i]][k - cost2[i]] + 1);}}}int ans1, ans2;ans1 = f[n][m];for (int j = m; ; j -- ) {if (ans1 == 0) {ans2 = 0;break;}if (f[n][j] == ans1) {ans2 = j;} else {break;}}printf("%d %d\n", ans1, m - ans2 + 1);return 0; }

但是我們將復(fù)雜度考慮進(jìn)去的話,O(KNM)O(KNM)O(KNM)有時(shí)候會(huì)過大,萬(wàn)一被卡怎么辦? 給出方案二

方案二
f[i][M][K]f[i][M][K]f[i][M][K] 遍歷前面i個(gè)精靈,統(tǒng)計(jì)的是在 體力恰好為 m, 捕捉恰好為 k 時(shí)候的最小消耗求的數(shù)量
復(fù)雜度O(KKM)O(KKM)O(KKM)快了那么一點(diǎn)點(diǎn)
f[i][[j][k]=min(f[i?1][j][k],f[i?1][m?cost2i][k?1]+cost1i)f[i][[j][k]=min(f[i-1][j][k], f[i-1][m-cost2_i][k-1]+cost1_i)f[i][[j][k]=min(f[i?1][j][k],f[i?1][m?cost2i?][k?1]+cost1i?)
代碼如下

#include <bits/stdc++.h> using namespace std;const int N = 1010, M = 510, K = 110, INF = 0x3f3f3f3f; int n, m, k1; int cost1[K], cost2[N]; int f[M][K]; // 統(tǒng)計(jì)的是在 體力恰好為 m, 捕捉恰好為 k 時(shí)候的最小消耗求的數(shù)量int main() {// inputcin >> n >> m >> k1;for (int i = 1; i <= k1; i ++ ) {scanf("%d%d", &cost1[i], &cost2[i]);}memset(f, 0x3f, sizeof f); f[0][0] = 0;for (int i = 1; i <= k1; i ++ ) {for (int j = m - 1; j >= cost2[i]; j -- ) {for (int k = k1; k >= 1; k -- ) {f[j][k] = min(f[j][k], f[j - cost2[i]][k - 1] + cost1[i]);}}}int ans1 = 0, ans2 = 0;for (int j = 0; j <= m - 1; j ++ ) {for (int k = 0; k < k1; k ++) {if (f[j][k] <= n) {if (k > ans1) {ans1 = k, ans2 = j;} else if (f[j][k] == n && j < ans2) {ans2 = j;}}}}printf("%d %d\n", ans1, m - ans2);return 0; }

DP很靈活,有時(shí)候換一個(gè)dp思路,就可以優(yōu)化一下復(fù)雜度

四、數(shù)字組合

Acwing 題目鏈接

挺簡(jiǎn)單一個(gè) dp問題,和 01 背包很像
下面給出空間優(yōu)化的代碼

#include <bits/stdc++.h> using namespace std;const int N = 10010; int f[N], a[N]; int n, m;int main() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) {scanf("%d", &a[i]);}memset(f, 0, sizeof f);f[0] = 1;for (int i = 1; i <= n; i ++ ) {for (int j = m; j >= a[i]; j -- ) {f[j] += f[j - a[i]];}}cout << f[m] << endl;return 0; }

五、買書

題目鏈接

挺簡(jiǎn)單的一個(gè) 完全背包問題
將書的個(gè)數(shù)看成 value,花費(fèi)就是費(fèi)用,然后跑一個(gè)完全背包

#include <bits/stdc++.h> using namespace std;typedef long long LL; typedef pair<int, int> PII; const int M = 1010; LL f[M]; int n = 4, m; int a[6] = {0, 10, 20, 50, 100};int main() {cin >> m;memset(f, 0, sizeof f);f[0] = 1;for (int i = 1; i <= 4; i ++ ) {for (int j = a[i]; j <= m; j ++ ) {f[j] += f[j - a[i]];}}cout << f[m] << endl;return 0; }

六、貨幣系統(tǒng)

Problem Link


題目大意就是 在 n 個(gè)數(shù) a1,a2,…,ana_1,a_2,\dots,a_na1?,a2?,,an?中,盡可能的選取少的數(shù)字將原數(shù)組給表示出來
解題思路如下

  • 首先,我們先將 原數(shù)組 a 從小到大進(jìn)行排序
  • 最小的數(shù)字是不可以被表示的,因此最小的數(shù)字 a1a_1a1?需要被選出,放在bbb數(shù)組中
  • 然后我們查看 b 數(shù)組可以組合出哪些數(shù)字
  • 不斷對(duì) a 數(shù)組的元素進(jìn)行遍歷,倘若他無法被 b 表示,那么他需要加入到 b 中,這是因?yàn)?如果 a[i]a[i]a[i] 無法被 a[0..i]a[0..i]a[0..i]所表示,那么他就無法被表示,需要放入支撐集 b 中

這就是一個(gè)完全背包的模型

/*這次的dp需要考慮到最小依賴集這個(gè)東西:對(duì)于 (n, a) ==> (m, b):那么:1. a1、、an一定是可以被b表示出來的2. b 一定是屬于 a, 主要是因?yàn)樘热?b 不屬于 a, 那么 b = sum(a[i] * t[i]) = sum(b[i] * t[i])自己被自己表示3. b不能被自己表示因此這個(gè)問題轉(zhuǎn)換為了 求 不能被自己組成的a,然后作為b的一部分,也就是一個(gè)完全背包題目;代碼簡(jiǎn)單,但是思路有點(diǎn)意思 */ #include <bits/stdc++.h> using namespace std;const int M = 25010, N = 110; int a[N], n, m; bool f[M];void sol() {sort(a + 1, a + 1 + n);m = a[n];memset(f, 0, sizeof f);f[0] = true;int res = 0;for (int i = 1; i <= n; i ++ ) {if (f[a[i]]) {continue;}// 無法被表示,需要被加入res ++;for (int j = a[i]; j <= m; j ++ ) {f[j] |= f[j - a[i]];}}printf("%d\n", res);}int main() {int T; cin >> T;while (T -- ) {scanf("%d", &n);for (int i = 1; i <= n; i ++ ) {scanf("%d", &a[i]);}sol();} }

七、多重背包問題III

多重背包問題鏈接

普通多重背包問題樸素寫法O(NMS)O(NMS)O(NMS)
f(i,j)f(i, j)f(i,j)表示前i個(gè)物品,容量小于等于jjj的最大價(jià)值

#include <bits/stdc++.h> using namespace std;const int N = 1010; int f[N][N]; int n, m, v[N], w[N], s[N];int main() {memset(f, 0, sizeof f);cin >> n >> m;for (int i = 1; i <= n; i ++ ) scanf("%d%d%d", &v[i], &w[i], &s[i]);for (int i = 1; i <= n; i ++ ) {for (int j = 0; j <= m; j ++ ) {for (int k = 0; k <= s[i] && k * v[i] <= j; k ++ ) {f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);}}}cout << f[n][m] << endl;return 0; }

多重背包問題二進(jìn)制優(yōu)化方法O(NMlogS)O(NMlogS)O(NMlogS)
首先,對(duì)于容量,價(jià)值,和數(shù)量分別為?vi,wi,siv_i,w_i,s_ivi?,wi?,si?的物品iii,我們可以將它分解為
多個(gè) 01 背包的物品
倘若 si=10s_i = 10si?=10,我們可以將其分為
????(vi,wi),(2vi,2wi),(4vi,4wi),(3vi,3wi)(v_i,w_i),(2v_i,2w_i),(4v_i,4w_i),(3v_i,3w_i)(vi?,wi?),(2vi?,2wi?),(4vi?,4wi?),(3vi?,3wi?),這幾個(gè) 01背包,可以將
????(vi,wi),(2vi,2wi),(3vi,3wi),…(siwi,sivi)(v_i,w_i),(2v_i,2w_i),(3v_i,3w_i), \dots (s_iw_i,s_i v_i)(vi?,wi?),(2vi?,2wi?),(3vi?,3wi?),(si?wi?,si?vi?)全部給枚舉一遍

這個(gè)是可以證明的
????(w,v),(2w,2v),(4w,4v),(2kw,2kv),(surplus?w,surplus?v),其中surplus≥2k,1+2+4+?+2k+surplus=s(w,v),(2w,2v),(4w,4v),(2^kw,2^kv),(surplus*w,surplus*v), 其中surplus\geq 2^k,1+2+4+\dots+2^k+surplus=s(w,v),(2w,2v),(4w,4v),(2kw,2kv),(surplus?w,surplus?v),surplus2k,1+2+4+?+2k+surplus=s

????首先1,2,4,?,2k1,2,4,\cdots,2^k1,2,4,?,2k可以將[0,2k+1][0,2^k+1][0,2k+1]完全包含,通過surplussurplussurplus區(qū)間再次移動(dòng),將[0,s][0,s][0,s]方案完全覆蓋掉。
對(duì)用代碼如下

#include <bits/stdc++.h> using namespace std;const int N = 2010; int f[N]; int n, m, v[N * 20], w[N * 20];int main() {memset(f, 0, sizeof f);cin >> n >> m;int n2 = 0;// 多重背包拆成 01 背包for (int i = 1; i <= n; i ++ ) {static int a, b, s;scanf("%d%d%d", &a, &b, &s);int base = 1;while (true) {if (s <= base) {v[++ n2] = s * a;w[n2] = s * b;break;} else {s -= base;v[++ n2] = base * a;w[n2] = base * b;base *= 2;}}}// 跑一遍 01 背包n = n2;for (int i = 1; i <= n; i ++ ) {for (int j = m; j >= v[i]; j -- ) {// f[i][j] = max(f[i][j], f[i - 1][j - v[i]] + w[i]);f[j] = max(f[j], f[j - v[i]] + w[i]);}}cout << f[m] << endl;return 0; }

完全背包的優(yōu)化,類似于前綴最大值,
然后我們多重背包的優(yōu)化,利用單調(diào)隊(duì)列的優(yōu)化


下面我來介紹優(yōu)化的方法


首先,我們還是先對(duì) i 個(gè)物品進(jìn)行遍歷
for(int i=1;i <= n; i ++ )
此時(shí),我們第 i 個(gè)物品的體積為 v,價(jià)值為w,可用數(shù)量為 j
考慮一下我們的狀態(tài)轉(zhuǎn)移方程f[i][j]=max(f[i?1][j],f[i?1][j?v]+w,f[i?1][j?2v]+2w…,f[i?1][j?sv]+sw)f[i][j] = max(f[i-1][j],f[i-1][j-v]+w,f[i-1][j-2v]+2w\dots ,f[i-1][j-sv]+sw)f[i][j]=max(f[i?1][j],f[i?1][j?v]+w,f[i?1][j?2v]+2w,f[i?1][j?sv]+sw),發(fā)現(xiàn),倘若我們將原本的 f[i?1][j]f[i-1][j]f[i?1][j] 分組,組別如下

組號(hào)內(nèi)容
0f[i][0], f[i][v], f[i][2v],…,f[i][kb+1]
1f[i][1], f[i][v+1], f[i][2v+1],…,f[i][kv+1]
…\dots??\cdots \cdots??
v-1f[i][v-1], f[i][v+v-1], f[i][2v+v-1],…,f[i][kv+v-1]

不難發(fā)現(xiàn),只有組內(nèi)之間還是有遞歸關(guān)系的,組間不存在聯(lián)系,下面我們討論組內(nèi)是如何優(yōu)化的的

首先,我們假設(shè)當(dāng)前更新的 f[i][0…m] 為數(shù)組 dp[M], 上一層的 f[i-1][0…m]為數(shù)組pre[M]
有以下公式

dp[j] = pre[j]
dp[j+v] = max(pre[j] + w, pre[j+v])
dp[j+2v] = max(pre[j] + 2w, pre[j+v] + w, pre[j+2v])
dp[j+3v] = max(pre[j] + 3w, pre[j+v] + 2w, pre[j+2v] + w, pre[j+3v])

進(jìn)一步整理一下
dp[j] = pre[j]
dp[j+v] = max(pre[j], pre[j+v] - w) + w
dp[j+2v] = max(pre[j], pre[j+v] - w, pre[j+2v] - 2w) + 2w
dp[j+3v] = max(pre[j], pre[j+v] - w, pre[j+2v] - 2w, pre[j+3v] - 3w) + 3w

不難發(fā)現(xiàn),經(jīng)過這樣的整理,我們的 dp 數(shù)組就是在原數(shù)組基礎(chǔ)之上增加了一個(gè) 滑動(dòng)窗口求最大值的算法(單調(diào)隊(duì)列,應(yīng)該是遞減的)

所以說,對(duì)應(yīng)的代碼如下所示

#include <bits/stdc++.h> using namespace std;const int N = 1010, M = 20010; int f[M], pre[M], n, m; int v, w, s; int que[M];int main() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) { // 對(duì)每個(gè)物品進(jìn)行遍歷scanf("%d%d%d", &v, &w, &s);memcpy(pre, f, sizeof f); // 將 i - 1 層的狀態(tài)保存起來,后面dp需要使用for (int j = 0; j < v; j ++ ) { // 對(duì)每一類進(jìn)行遍歷,j, j+v, j+2v,..static int head, tail;head = 0, tail = -1; // 循環(huán)隊(duì)列for (int k = j; k <= m; k += v) { // 對(duì)該類進(jìn)行 動(dòng)態(tài)規(guī)劃// 首先更新我們的滑動(dòng)窗口,去掉隊(duì)列前劃過去的,往后面加入if (head <= tail && k - que[head] > s * v) { // 隊(duì)列頭超過了窗口的最左側(cè)head ++;}while (head <= tail && (pre[que[tail]] - (que[tail] - j) / v * w) <= (pre[k] - (k - j) / v * w)) { // 用于保證窗口的單調(diào)性-- tail;}que[++ tail] = k; // 增加窗口的尾部f[k] = pre[que[head]] + (k - que[head]) / v * w; // 用窗口的維護(hù)數(shù)值來更新結(jié)果}}}cout << f[m] << endl;return 0; }

八、慶功會(huì)

Acwing 鏈接

本題就是一個(gè)很裸的 多重背包問題
通過觀察復(fù)雜度,不難發(fā)現(xiàn), NMS 復(fù)雜度就可以過去
倘若空間不夠存儲(chǔ)的話,可以采取滾動(dòng)數(shù)組進(jìn)行優(yōu)化

#include <bits/stdc++.h> using namespace std;const int N = 510, M = 6010; int f[N][M]; int v, w, s, n, m;int main() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) {scanf("%d%d%d", &v, &w, &s);for (int j = 0; j <= m; j ++ ) { // f[i][j] = max(f[i-1][j], f[i-1][j-kv] + kw)f[i][j] = f[i - 1][j];for (int k = 1; k <= s; k ++ ) {if (j < k * v) break;f[i][j] = max(f[i][j], f[i - 1][j - k * v] + k * w);}}}cout << f[n][m] << endl;return 0; }

空間優(yōu)化之后的代碼

#include <bits/stdc++.h> using namespace std;const int N = 510, M = 6010; int f[M]; int v, w, s, n, m;int main() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) {scanf("%d%d%d", &v, &w, &s);for (int j = m; j >= 0; j -- ) { // 注意這個(gè)順序// f[j] = f[j];// f[i][j] = max(f[i-1][j], f[i-1][j-kv] + kw)for (int k = 1; k <= s; k ++ ) {if (j < k * v) break;f[j] = max(f[j], f[j - k * v] + k * w);}}}cout << f[m] << endl;return 0; }

九、混合背包問題

Acwing 混合背包

這就是一個(gè) 01 背包,完全背包,多重背包的綜合
這里多重背包使用 二進(jìn)制優(yōu)化 即可跑完,復(fù)雜度O(NMlogS)O(NMlogS)O(NMlogS),時(shí)間復(fù)雜度沒有超時(shí)
下面給出 空間優(yōu)化的解題方法

#include <bits/stdc++.h> using namespace std;const int M = 1010; int f[M], n, m, v, w, s;int main() {cin >> n >> m;memset(f, 0, sizeof f);for (int i = 1; i <= n; i ++ ) { scanf("%d%d%d", &v, &w, &s);if (s == 0) {// 完全背包for (int j = v; j <= m; j ++ ) {f[j] = max(f[j], f[j - v] + w);}} else { // 01 背包和多重背包if (s == -1) {s = 1;}for (int k = 0; (1 << k) <= s; k ++ ) {s -= (1 << k);for (int j = m; j >= v * (1 << k); j -- ) { // v * (1 << k)f[j] = max(f[j], f[j - v * (1 << k)] + w * (1 << k));}}if (s) {for (int j = m; j >= s * v; j -- ) { // 注意這個(gè)下界的判斷f[j] = max(f[j], f[j - s * v] + s * w);}}}}cout << f[m] << endl;return 0; }

十、二維費(fèi)用的背包問題

Acwing 題目鏈接

一個(gè)非常裸的 二維費(fèi)用 背包問題

#include <bits/stdc++.h> using namespace std;const int N = 110; int f[N][N]; int n, v, m;int main() {memset(f, 0, sizeof f); // 01 bagcin >> n >> v >> m;for (int i = 1; i <= n; i ++ ) {static int a, b, c;scanf("%d%d%d", &a, &b, &c);for (int j = v; j >= a; j -- ) {for (int k = m; k >= b; k -- ) {f[j][k] = max(f[j][k], f[j - a][k - b] + c);}}}cout << f[v][m] << endl;return 0; }

十一、潛水員

Acwing 題目鏈接


首先,我先給出一個(gè)錯(cuò)誤的方法,然后說為什么是不可以的
該種方法 f[i][j][k]f[i][j][k]f[i][j][k] 表示對(duì)前 iii 個(gè)物品,選取氧氣量恰好為 jjj,氮?dú)饬壳『脼?span id="ozvdkddzhkzd" class="katex--inline">kkk,他所對(duì)應(yīng)的最小重量
初始化,顯然 memset(f, 0, sizeof f), f[0][0][0] = 1
對(duì)應(yīng)的代碼如下所示

#include <bits/stdc++.h> using namespace std;const int M = 30, N = 110, INF = 0x3f3f3f3f; int f[M * 2 + 5][N * 2 + 5]; int m, n, k1;int main() {cin >> m >> n;cin >> k1;memset(f, 0x3f, sizeof f);f[0][0] = 0;for (int i = 1; i <= k1; i ++ ) { static int a, b, c;scanf("%d%d%d", &a, &b, &c);// 一定要注意他這個(gè)超限制的情況!// 這樣做也錯(cuò)是因?yàn)?#xff0c;雖然 m 已經(jīng)夠了,但是因?yàn)?n還不夠,因此 m 的增加量可以使很大的for (int j = m + M; j >= a; j -- ) {for (int k = n + N; k >= b; k -- ) {f[j][k] = min(f[j][k], f[j - a][k - b] + c);} }}int ans = INF;for (int j = m; j <= m + M; j ++ ) {for (int k = n; k <= n + N; k ++ ) {ans = min(ans, f[j][k]);}}cout << ans << endl;return 0; }

但是該種方案是錯(cuò)誤的!


????原因在于,我們尋找的方案是 氧氣容量 大于等于 m, 氮?dú)馊萘看笥诘扔?n 的最消息重量的解決方案,**但是**上限是多少,我們是沒有辦法確定了 ????你可以理所當(dāng)然的以為 上限是 m * 2, n * 2, 或者是 m + M, n + N,但是都不對(duì) ????上限其實(shí)是 N * M 級(jí)別的,因?yàn)樘热粞鯕夂艹渥?#xff0c;但是氮?dú)饩褪呛苌?#xff0c;因?yàn)榈獨(dú)獠蛔阈枰粩嗉尤霘飧资沟玫獨(dú)膺_(dá)到標(biāo)準(zhǔn),與此同時(shí)氧氣也在增加,最壞情況下是 M * N ????因此,數(shù)組大小很爆炸,消耗時(shí)間也很爆炸,雖然遞歸式子沒問題,但是從時(shí)間和空間的角度來看,并不可行。

下面我們考慮另一種dp思路

f[i][j][k] 表示的是 前 i 個(gè)物品,氧氣量大于等于 j,氮?dú)饬看笥诘扔?k 的最小重量,同樣是從初始化和狀態(tài)轉(zhuǎn)移方程兩個(gè)方面進(jìn)行分析

初始化方面
f[0][x][y]=INF, 如果x>0∣∣y>0x>0 || y>0x>0y>0
f[0][x][y]=0,如果x<=0&&y<=0x<=0\&\&y<=0x<=0&&y<=0
其他都初始化為 INF
但是,因?yàn)槲覀兊臄?shù)組下表數(shù)值都為正數(shù),也就是說取不到這個(gè)負(fù)數(shù)的情況,因此后面的運(yùn)算對(duì)于負(fù)值的下標(biāo)我們是通過特判來選取數(shù)值的。

狀態(tài)轉(zhuǎn)移方程
對(duì)于遍歷第 i 個(gè)物品的屬性 a, b, c
f[i][j][k]=max(f[i-1][j][k], f[i-1][j-a][k-b]+v)
這個(gè)方程是很好理解的,但是關(guān)鍵是我們有的合法狀態(tài)是小于等于 0 的情況,使用數(shù)組是沒有辦法表示的(即使使用偏移量,也因?yàn)榭臻g過大,而不可行,類似于我們討論的第一種方法)

那么,我們是如何解決這個(gè)問題的呢?

對(duì)應(yīng)代碼如下所示

/*f[i][j]:表示恰到達(dá)到 i, j這個(gè)的時(shí)候, 最小重量注意是最小,初始化應(yīng)該為INF它需要的是M, 但是我們不能遍歷只是到M, N注意,如果是恰好的話,那么,范圍太大, 數(shù)組開不了,而且會(huì)超時(shí)但是這個(gè)數(shù)據(jù)開的 應(yīng)該要很大,很煩, 應(yīng)該是 [N*M][N*M]....因此我們應(yīng)該把這個(gè)狀態(tài)給改了,不適用這個(gè)f[i][j]:表示大于等于 i, j這個(gè)的時(shí)候, 最小重量f[-x][-y] = 0;others INF; */ #include <bits/stdc++.h> using namespace std;const int M = 30, N = 110, INF = 0x3f3f3f3f; int f[M * 2 + 5][N * 2 + 5]; int m, n, k1;int main() {cin >> m >> n;cin >> k1;memset(f, 0x3f, sizeof f);f[0][0] = 0;for (int i = 1; i <= k1; i ++ ) { static int a, b, c;scanf("%d%d%d", &a, &b, &c);for (int j = m; j >= 0; j -- ) {for (int k = n; k >= 0; k -- ) {if (j - a >= 0 && k - b >= 0) {f[j][k] = min(f[j][k], f[j - a][k - b] + c);} else if (j - a < 0 && k - b < 0) {f[j][k] = min(0 + c, f[j][k]);} else {f[j][k] = min(f[j][k], f[max(0, j - a)][max(0, k - b)] + c);}} }}cout << f[m][n] << endl;return 0; }

十二、機(jī)器分配

ACWing Problem Link

挺簡(jiǎn)單個(gè)一個(gè)題目,該問題非 01 背包,也非完全背包、多重背包,因?yàn)殡m然是設(shè)備分配給同一個(gè)公司、或者是其他公司,增加的價(jià)值是不一樣的!

它更像是一個(gè)分組背包,f[i][j] i 表示的第 i 組,選取組內(nèi)的物品,組內(nèi)的物品可以使一個(gè)設(shè)備、兩個(gè)設(shè)備、?\cdots? 多個(gè)設(shè)備

f[i][j]f[i][j]f[i][j] 可以表示為前 i 個(gè)公司分配小于等于 j 個(gè)設(shè)備時(shí)候的最大價(jià)值
f[i][j]=maxf[i?1][j],f[i?1][j?1]+w[i][1],f[i?1][j?2]+w[i][2],?f[i?1][j?j]+w[i][j]f[i][j] = max{f[i-1][j], f[i-1][j-1]+w[i][1], f[i-1][j-2]+w[i][2], \cdot f[i-1][j-j]+w[i][j]}f[i][j]=maxf[i?1][j],f[i?1][j?1]+w[i][1],f[i?1][j?2]+w[i][2],?f[i?1][j?j]+w[i][j]
但是,因?yàn)樽詈笮枰敵龇峙涞姆桨?#xff0c;我們需要數(shù)組 g[i][j] 記錄一下到達(dá) f[i][j] 這個(gè)狀態(tài)時(shí)候,公司 i 分配了多少臺(tái)機(jī)器,之后就可以知道合法方案了

代碼如下

#include <bits/stdc++.h> using namespace std;const int N = 15, M = 20; int f[N][M], w[N][M]; int g[N][M], n, m;int main() {cin >> n >> m;for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {scanf("%d", &w[i][j]);}}memset(f, 0, sizeof f);memset(g, 0, sizeof g);for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {for (int k = 0; k <= j; k ++ ) {if (f[i][j] < f[i - 1][j - k] + w[i][k]) {f[i][j] = f[i - 1][j - k] + w[i][k];g[i][j] = k;}}}}// find the maxint ri, rj, res = -1;for (int j = 0; j <= m; j ++ ) {if (f[n][j] > res) {res = f[n][j];ri = n, rj = j;}}// find the pathvector<int> path;while (ri != 0) {path.push_back(g[ri][rj]);rj -= g[ri][rj];ri --;}reverse(path.begin(), path.end());cout << res << endl;for (int i = 0; i < path.size(); i ++ ) {printf("%d %d\n", i + 1, path[i]);}return 0; }

十三、開心的金明

ACWing 題目鏈接


寫一個(gè)空間優(yōu)化的 01 背包即可

#include <bits/stdc++.h> using namespace std;const int N = 30, M = 30010; int f[M], n, m;int main() {cin >> m >> n;memset(f, 0, sizeof f);for (int i = 1; i <= n; i ++ ) {static int level, v;scanf("%d%d", &v, &level);for (int j = m; j >= v; j -- ) {f[j] = max(f[j], f[j - v] + v * level);}}cout << f[m] << endl;return 0; }

十四、有依賴的背包問題

ACWing Link

一個(gè)樹狀的有依賴背包問題,
f[u][j] 表示的是 u 作為根的子樹,當(dāng)需要的體積小于等于 j 的最大價(jià)值
顯然f[u][j] 的更新是依賴于他的兒子的,(因?yàn)槭菢?#xff0c;我們必須是dfs來確定便利的先后順序,而不是之間 for i = 1;i <= n; i ++了)
首先,我們先讓 父節(jié)點(diǎn)為 u 的點(diǎn)集合 set 跑一個(gè) 分組背包,得到 沒有加入 u 的 f[u][j],之后我們?cè)谌藶榈募尤?u 這個(gè)點(diǎn)就可以了,具體還可以優(yōu)化,請(qǐng)看下面的代碼.

#include <bits/stdc++.h> using namespace std;const int N = 110, INF = 0x3f3f3f3f;int f[N][N], n, m, v[N], w[N]; bool st[N]; int h[N], e[N], ne[N], idx;void add(int a, int b) {e[idx] = b, ne[idx] = h[a], h[a] = idx ++; }void dfs(int u, int m) {int v2;for (int i = h[u]; ~i; i = ne[i]) {v2 = e[i];if (!st[v2]) {dfs(v2, m - v[u]); // 減小一下子復(fù)雜度// dfs(v2, m);st[v2] = true;}// 多重背包for (int j = m; j >= 0; j -- ) { // 注意,這里是大于等于 0,和 Vi 沒有關(guān)系,而且注意這個(gè)優(yōu)化空間的順序for (int k = 0; k <= j; k ++ ) {f[u][j] = max(f[u][j], f[v2][k] + f[u][j - k]);} }}// 最后處理一下,這個(gè)一定不能提前處理,因?yàn)樽约褐荒苜I一次// 這個(gè)處理是寫在外面的,千萬(wàn)別給我寫里面去,里面跑的是多重背包for (int t = m; t >= v[u]; t -- ) { // 而且需要注意這個(gè)順序 f[u][t] = w[u] + f[u][t - v[u]];}for (int t = 0; t < v[u]; t ++ )f[u][t] = 0; }int main() {// input and build the treecin >> n >> m;int root = -1;memset(h, -1, sizeof h), idx = 0;for (int i = 1; i <= n; i ++ ) {static int p;scanf("%d%d%d", &v[i], &w[i], &p);if (p == -1) {root = i;} else {add(p, i);}}// dp process memset(st, false, sizeof st);memset(f, 0, sizeof f);dfs(root, m);cout << f[root][m] << endl;return 0; }

十五、背包問題求方案數(shù)

Acwing Link

這個(gè)題目和 原本的背包問題類似,只不過是在維護(hù) 原本dp的數(shù)組過程中,多維護(hù)了一個(gè)數(shù)組, g[i][j] 用于表示到達(dá)當(dāng)前狀態(tài)的方案數(shù)

#include <bits/stdc++.h> using namespace std;const int N = 1010; const int MOD = 1e9 + 7; int v[N], w[N], n, m; int g[N][N], f[N][N];int main() {// inputcin >> n >> m;for (int i = 1; i <= n; i ++ ) {scanf("%d%d", &v[i], &w[i]);}// initialize, 注意這里的初始化可能和我們之前的初始化有些許的不同memset(f, 0, sizeof f);memset(g, 0, sizeof f);for (int i = 0; i <= m; i ++ ) {g[0][i] = 1;}// dpfor (int i = 1; i <= n; i ++ ) {for (int j = 0; j <= m; j ++ ) {if (j >= v[i]) {f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);g[i][j] = 0;// 更新方案數(shù)if (f[i][j] == f[i - 1][j]) {g[i][j] += g[i - 1][j];} if (f[i][j] == f[i - 1][j - v[i]] + w[i]) {g[i][j] += g[i - 1][j - v[i]];}} else {// 更新方案數(shù)f[i][j] = f[i - 1][j];g[i][j] = g[i - 1][j];}g[i][j] %= MOD;}}// outputcout << g[n][m] << endl;return 0; }

十六、背包問題求具體方案

Problem Link

這個(gè)題目很有意思,我在這里進(jìn)行一下詳細(xì)的講解
對(duì)于原本的遞歸公式
????f[i][j]=max(f[i?1][j],f[i?1][j?v[i]]+w[i])f[i][j] = max(f[i-1][j], f[i - 1][j - v[i]] + w[i])f[i][j]=max(f[i?1][j],f[i?1][j?v[i]]+w[i]),f[i][j] 表示的是從 1…n 個(gè)物品選擇部分,使得體積為 j 的最大價(jià)值,使用 g[i][j] 可以表示當(dāng)前狀態(tài) f[i][j] 是從哪個(gè)狀態(tài)轉(zhuǎn)移來的。
????為了尋找方案的最小字典序,那我們必須要對(duì) g[i][j] 進(jìn)行處理,使其滿足這個(gè)最小字典序的要求,那么我們是讓 當(dāng)前物品 i 被選,還是不被選好呢?

????從直覺上來看,盡可能的讓當(dāng)前物品被選,可能 會(huì)好一些,這是因?yàn)槲覀?i 是從 1 -> n 開始枚舉的,當(dāng)然是需要被選中比較好。
????但是,不妨考慮一種情況,f[i][j] (假設(shè) i 為 7)倘若不選自己的話,為 1, 3, 5物品組合,倘若選了自己的話 為 2, 3, 7,顯然來看,這種貪心思路是有問題的。

????回到看看,問題到底是出在哪里了呢?因?yàn)?f[i][j] 指的是 1…n 個(gè)物品中選,對(duì)當(dāng)前物品 i 選不選進(jìn)行判斷,我們對(duì) 最后一個(gè)物品進(jìn)行優(yōu)先的選擇,然而最后一個(gè)物品,就是方案數(shù)中的最后一個(gè)數(shù),他是最不重要的,換而言之,我們應(yīng)當(dāng)將第一個(gè)物品,作為最重要的點(diǎn),最后判斷(因?yàn)樽詈鬀Q策的,才是最重要的)

????所以,不難得知,求字典序最大的,也是第一個(gè)數(shù)決策粒度對(duì)大,也應(yīng)該 放在最后一個(gè)進(jìn)行判斷。

為了適應(yīng)這種變化,我將 f[i][j] 數(shù)組的遞歸方程個(gè)真實(shí)含義做了改變
f[i][j] 表示從前 i … n 個(gè)物品中 選取部分,使得物品體積(代價(jià)) 小于等于 j 的最大價(jià)值
f[i][j] = max(f[i + 1][j], f[ i + 1][j - v[i]] + w[i]) 而且盡可能的使用后者,即保證能使用 i 物品就使用 i 物品(字典序最小)

#include <bits/stdc++.h> using namespace std;const int N = 1010; int f[N][N], g[N][N]; int v[N], w[N]; int n, m;int main() {// inputcin >> n >> m;for (int i = 1; i <= n; i ++ ) {scanf("%d%d", &v[i], &w[i]);}// initialize memset(f, 0, sizeof f);memset(g, -1, sizeof f);// dpfor (int i = n; i >= 1; i -- ) {for (int j = 0; j <= m; j ++ ) {if (j >= v[i]) {f[i][j] = max(f[i + 1][j], f[i + 1][j - v[i]] + w[i]);if (f[i][j] == f[i + 1][j - v[i]] + w[i]) {g[i][j] = j - v[i];} else {g[i][j] = j;}} else {f[i][j] = f[i + 1][j];g[i][j] = j;}}}// outputint res = m;for (int i = 1; i <= n; i ++ ) {if (g[i][res] == res) {continue;} else {cout << i << ' ';res = g[i][res];}}puts("");return 0; }

十七、能量石

Problem Link


十八、今明的預(yù)算方案

總結(jié)

以上是生活随笔為你收集整理的动态规划问题之背包模型(18题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

国产高清视频免费观看 | 亚洲精品乱码久久 | 黄色电影在线免费观看 | 日韩三级视频在线观看 | 婷婷丁香综合 | 亚洲一区免费在线 | 2019中文在线观看 | 在线97| 97在线免费 | av永久网址| 国产免费三级在线观看 | 久久久资源网 | www.亚洲激情.com | 久久久久影视 | 国产精品久久久久久久久大全 | 成人午夜片av在线看 | 天堂av在线网站 | 久久精品视频日本 | 色综合天天综合 | 成人免费视频在线观看 | 日韩视频免费观看高清完整版在线 | 成年人国产在线观看 | 在线观看日韩 | 久久69av| 国产视频亚洲 | 美女搞黄国产视频网站 | 日韩动漫免费观看高清完整版在线观看 | 国产精品毛片久久蜜 | 97人人模人人爽人人喊中文字 | 午夜精品久久久 | 三级黄色大片在线观看 | 欧美a在线看 | 亚洲精区二区三区四区麻豆 | 黄色免费电影网站 | 成年人免费看av | 中文字幕在线日本 | av一区在线播放 | 亚洲免费公开视频 | 中文字幕在线观看第一页 | 天天天干 | 狠狠色丁香婷婷综合 | 在线免费观看视频a | 久久国产欧美日韩 | 成人在线黄色电影 | 中文字幕第一页在线vr | 国产精品久久麻豆 | 91精品久久久久久粉嫩 | 国内成人精品视频 | 免费观看一级特黄欧美大片 | 福利在线看片 | 国产日韩精品久久 | 91精品国产欧美一区二区成人 | 欧美性天天 | 91麻豆精品国产91久久久久久久久 | 日韩最新在线视频 | 亚洲涩涩色 | 在线成人免费av | 中文字幕在线观看视频一区二区三区 | 久久久久久久久久久久久久电影 | 国产日产精品一区二区三区四区的观看方式 | 69久久夜色精品国产69 | 在线黄色免费av | a级黄色片视频 | 久久久九九 | 中文字幕一区二区三区精华液 | 国产黄网站在线观看 | 久久精品这里都是精品 | 99免费观看视频 | 草久视频在线 | 精品毛片一区二区免费看 | 国产一区免费观看 | 五月激情在线 | 久久久午夜视频 | av在线日韩 | 久久综合九色综合久久久精品综合 | 欧美一级欧美一级 | 高清国产午夜精品久久久久久 | 欧美日韩不卡一区二区 | 四虎国产精品免费观看视频优播 | 成人午夜网 | 色香网| 日韩精品一区二区三区免费观看 | 美女网站黄免费 | 日韩欧美综合精品 | 日本中文字幕网址 | 国产成人福利在线观看 | 爱爱av网站| 91看片淫黄大片一级在线观看 | 国产视频黄 | 国产资源在线免费观看 | 欧美成人基地 | 久久99久久99精品免观看软件 | 亚洲三级在线播放 | 成人在线免费视频观看 | 伊人五月婷 | 一级黄色免费网站 | 久久精品日产第一区二区三区乱码 | 91夫妻自拍 | 精品在线观看一区二区 | 91av在线视频免费观看 | 亚洲一区视频免费观看 | 国产综合激情 | 国产综合婷婷 | 日韩r级在线 | 亚洲国产精品成人av | 99成人在线视频 | 欧美伦理一区二区三区 | 精品黄色在线观看 | 亚洲精品国产精品久久99 | 午夜精品视频免费在线观看 | 亚洲电影一区二区 | 国产理论免费 | 久久亚洲精品国产亚洲老地址 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 四虎www com | 国产午夜精品一区二区三区在线观看 | 亚洲国产中文字幕在线视频综合 | 日日操狠狠干 | 日韩精品欧美视频 | 免费在线电影网址大全 | 色婷婷中文 | 欧美日本不卡视频 | 精品v亚洲v欧美v高清v | 天天夜夜狠狠操 | 亚洲精品综合一二三区在线观看 | 色噜噜色噜噜 | 99re久久资源最新地址 | 久久综合久久综合久久 | 国产日韩一区在线 | 久久成电影 | 91视频a | 91麻豆精品国产自产在线游戏 | 色中文字幕在线观看 | 久久私人影院 | 精品字幕在线 | 欧美日韩中文字幕综合视频 | 久热电影| 69国产盗摄一区二区三区五区 | 日韩视频在线观看视频 | 免费视频黄色 | 中文亚洲欧美日韩 | 久草免费看 | 超碰在97 | 婷婷五月色综合 | 亚洲色影爱久久精品 | 日本公妇色中文字幕 | 亚洲美女免费精品视频在线观看 | 国产毛片在线 | 国产精品aⅴ | 国产精品久久久久久久久久99 | 午夜精品一区二区三区免费 | 福利精品在线 | 久久综合久色欧美综合狠狠 | 久久久久久国产精品免费 | 亚洲精品免费在线 | 亚洲欧美精品一区二区 | 婷婷丁香狠狠爱 | 久久精品99国产 | 国产九色91| 9999在线观看 | 福利一区在线 | 精品一区二区电影 | 国产在线不卡视频 | 午夜在线日韩 | 免费视频久久久久 | 亚洲欧美日韩国产一区二区三区 | 久草网站在线观看 | 五月婷丁香网 | 日韩性片 | 色婷婷丁香 | 黄色www| 久久精品99久久久久久2456 | 国产婷婷视频在线 | 国产亚洲在线视频 | 综合网天天 | 国产视频在 | 亚洲一区二区三区在线看 | 日韩毛片久久久 | 超碰在线观看99 | 欧美精品久久久久久久久久丰满 | 成年人视频免费在线播放 | 日韩成人高清在线 | 人人爽人人做 | 伊人亚洲综合 | 91女神的呻吟细腰翘臀美女 | 久久国内精品99久久6app | 高潮毛片无遮挡高清免费 | 国产91精品一区二区麻豆网站 | 日日躁你夜夜躁你av蜜 | 91麻豆精品国产91久久久无需广告 | 99久久精品免费看国产四区 | 国产成人a亚洲精品v | 日韩高清免费在线观看 | 亚洲在线免费视频 | 久久99亚洲精品 | av黄免费看| 亚洲资源视频 | av电影中文字幕在线观看 | 亚洲va欧美 | 五月婷婷综合色拍 | 麻豆免费视频观看 | av免费电影在线 | 五月天婷婷狠狠 | 亚洲国产精品女人久久久 | 中文字幕av免费观看 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产专区第一页 | 国产精品人人做人人爽人人添 | www黄色com| 日韩精品视频免费看 | 亚洲日日日 | 激情片av | 特级黄色视频毛片 | 久久开心激情 | 久久爽久久爽久久av东京爽 | 日韩av在线小说 | 天天色天天操综合 | 色婷婷狠狠操 | 国产精品女人久久久 | 色视频在线免费 | 日韩女同av| 狠狠操综合网 | 中文字幕有码在线观看 | 免费观看性生交 | 久久在现| 黄色a视频| 成人免费观看大片 | 免费成人结看片 | 婷婷久久国产 | 亚洲精品乱码久久久久久蜜桃不爽 | 中文字幕亚洲情99在线 | 国产丝袜制服在线 | 91女神的呻吟细腰翘臀美女 | 五月婷亚洲 | 精品日韩在线 | 青青草国产成人99久久 | 日韩精品一区二区在线观看 | 久久视频在线视频 | 国产视频久久久 | 久久97超碰 | 青草草在线视频 | 美女精品在线观看 | 久草视频资源 | 激情综合一区 | av大全在线免费观看 | 久久婷亚洲五月一区天天躁 | 欧美日本啪啪无遮挡网站 | 91高清免费在线观看 | 欧美黄色高清 | 美女免费视频网站 | 午夜av激情 | 精品极品在线 | 欧美 亚洲 另类 激情 另类 | 中文字幕中文字幕在线中文字幕三区 | 亚洲欧洲精品一区二区 | 99r精品视频在线观看 | 国产精品99蜜臀久久不卡二区 | 日韩动态视频 | 91在线视频免费观看 | 色丁香色婷婷 | 精品一区二区精品 | 欧美一级久久久久 | 日本三级在线观看中文字 | 国产精品原创 | 天天想夜夜操 | 中文在线8资源库 | 色是在线视频 | 超碰在线观看99 | 99精彩视频在线观看免费 | 超碰在97 | 久久精品网站免费观看 | a在线v| 国产精品久久嫩一区二区免费 | 久久久久欧美精品 | 在线视频久久 | 又爽又黄又无遮挡网站动态图 | 日本特黄一级片 | 日韩免费不卡av | 婷婷色综合 | 日韩美女一级片 | 成人播放器 | 免费观看久久 | 久久最新| 91麻豆精品国产午夜天堂 | www.黄色片网站 | 四虎www com| 六月丁香社区 | 4438全国亚洲精品在线观看视频 | 欧美日韩三区二区 | 91片网| 久久精品黄色 | 免费国产亚洲视频 | 97视频免费在线观看 | 最近中文字幕完整高清 | 最新中文字幕 | 久草在线免费看视频 | 日韩精品免费在线观看 | 亚洲电影成人 | 91九色蝌蚪视频网站 | 国内99视频| 五月天堂色 | 九九综合九九 | 91自拍视频在线 | 久久免费毛片视频 | 日日干av| a天堂在线看 | 天天操夜夜操夜夜操 | 国产在线播放一区二区 | 午夜精品一二三区 | 精品成人在线 | 亚洲欧美精品在线 | 亚洲97在线 | 精品免费在线视频 | 久久综合激情 | 中文字幕av最新 | 成人免费观看网站 | 在线免费中文字幕 | 国产一级片久久 | 人人视频网站 | 欧美怡红院视频 | 日韩电影一区二区三区在线观看 | 国内一级片在线观看 | 国产精品私拍 | www.夜夜操.com| 亚洲九九九在线观看 | www久久国产 | 久久久久女教师免费一区 | 97精品国自产拍在线观看 | 国产日产av | 久久久久久久久毛片精品 | 免费影视大全推荐 | 五月天av在线| 一区二区视频播放 | 黄色软件视频网站 | 免费观看的黄色片 | www.久久久精品 | 91精品无人成人www | 在线观看涩涩 | av中文字幕日韩 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 97碰碰精品嫩模在线播放 | 精品免费一区二区三区 | 91在线欧美| 国产成人av | 不卡av在线免费观看 | 91精品久久久久久久久久久久久 | 99这里只有精品视频 | 在线看中文字幕 | 999久久久精品视频 日韩高清www | 91精品国产综合久久福利 | 国产第页| ww亚洲ww亚在线观看 | 开心激情五月婷婷 | 国产第一页精品 | 在线性视频日韩欧美 | 精品久久中文 | 免费在线观看视频a | 伊人网av | 国产做aⅴ在线视频播放 | 国产精品理论视频 | 国产亚洲精品久久久久久 | 九色视频网 | wwwwww色 | 日韩欧美视频在线 | 伊人成人久久 | 精品日韩av| 日日干美女 | 中文国产在线观看 | 国产精品99久久久精品免费观看 | 粉嫩一区二区三区粉嫩91 | 人人爽人人香蕉 | 西西44人体做爰大胆视频 | 亚洲黄色精品 | 又色又爽又黄高潮的免费视频 | 91在线小视频 | 日韩色在线 | 久久97视频 | 成人午夜剧场在线观看 | 西西人体4444www高清视频 | 欧美国产日韩一区二区 | 国产亚洲精品美女 | 97国产在线播放 | 国产精品18久久久久vr手机版特色 | 国产精品成人国产乱一区 | 日日干 天天干 | 久久免费电影网 | 中文字幕一区二区三区四区视频 | 国内精品免费久久影院 | 91久久精品一区 | 伊人日日干 | 日韩欧美精品在线观看视频 | av在线一二三区 | 欧美精品在线观看一区 | 久久国产精品99久久久久久丝袜 | 青青河边草免费观看完整版高清 | www.夜色.com| 国产无吗一区二区三区在线欢 | 天天操天天添天天吹 | 婷婷黄色片 | 久久在线播放 | 久久久久99精品国产片 | 日日夜夜人人精品 | 欧日韩在线视频 | 亚洲理论在线观看电影 | www.av在线.com | 麻豆91在线看 | 欧美少妇xxxxxx | 91精品国产一区 | 欧美在线观看视频一区二区三区 | 久久社区视频 | 国产精品乱码久久 | 天天操天天操天天操天天 | 久久国产精品99久久人人澡 | 久久九九影视 | 亚洲另类久久 | 国产99久久99热这里精品5 | 丁香婷婷激情国产高清秒播 | 99精品国产一区二区三区麻豆 | 青青五月天 | av久久在线 | 中文字幕在线播放日韩 | 黄色在线观看免费网站 | 欧美日韩在线观看一区二区三区 | 最新av免费在线 | 黄色片网站免费 | 国产中出在线观看 | 波多野结衣视频一区 | 一区三区视频在线观看 | 91看国产| 人人爽人人搞 | 欧美人zozo | 久久激情视频网 | 国产美女精品在线 | 日韩欧美黄色网址 | 精精国产xxxx视频在线播放 | 久久国产一区二区 | 国产精品白浆 | 91成品人影院 | 欧美孕妇与黑人孕交 | 免费亚洲精品 | 激情五月播播久久久精品 | 五月激情在线 | 99久久婷婷国产精品综合 | 在线观看国产91 | 国产分类视频 | 国产在线 一区二区三区 | 狠狠狠狠狠狠干 | 毛片网站在线 | 久久久久免费网站 | 国产糖心vlog在线观看 | 九九热在线观看视频 | 欧美国产不卡 | 成人中文字幕在线 | 国产精品短视频 | 五月激情亚洲 | 亚洲一二三在线 | 久久香蕉电影网 | 亚洲精品在线看 | 91av电影在线观看 | 久久论理 | 操天天操| 色婷婷电影 | 五月开心激情 | 草莓视频在线观看免费观看 | av色综合网 | 91少妇精拍在线播放 | 九九免费在线观看视频 | 福利一区二区在线 | 亚洲精品 在线视频 | 在线电影av| 黄色免费观看 | 97超碰成人 | 另类五月激情 | 亚洲成av人片在线观看www | 亚洲国产美女久久久久 | 日韩一区二区三区免费视频 | 丁香色婷 | 久久香蕉一区 | 永久免费毛片 | 操操操av| 亚洲精品免费在线 | 美女黄久久 | 美女视频一区 | 久久精品女人毛片国产 | 久草久草在线 | 99亚洲天堂| 国产va饥渴难耐女保洁员在线观看 | 五月天色网站 | 日日精品 | 免费在线看成人av | 国产精品久久久久久久久久直播 | 深夜视频久久 | 久久99精品久久久久久久久久久久 | 懂色av一区二区三区蜜臀 | 国产美女被啪进深处喷白浆视频 | 国产 视频 久久 | 日韩久久精品一区二区三区下载 | 久久精品一二区 | 四虎成人免费观看 | 8090yy亚洲精品久久 | 99久久精品网 | 黄色的网站在线 | 午夜精品一二三区 | 51久久成人国产精品麻豆 | 婷婷色网站 | 中文字幕 影院 | 首页av在线 | 波多野结衣精品 | 久久艹综合 | 色婷婷免费 | 丁香婷婷在线 | av中文资源在线 | 一区二区不卡视频在线观看 | 久久久精品久久日韩一区综合 | 色婷婷a | 人人澡超碰碰97碰碰碰软件 | 天堂视频中文在线 | 国产手机免费视频 | 国产亚洲精品v | www178ccom视频在线 | 日韩成人精品在线观看 | 亚洲国产精品一区二区久久,亚洲午夜 | 久久精品超碰 | www.av中文字幕.com | 亚洲精品白浆高清久久久久久 | 成年人免费看片网站 | www久久99 | www.com久久久 | 五月天婷婷视频 | 四季av综合网站 | 九九热在线视频 | 97超碰色偷偷 | 天天爽天天做 | 91麻豆高清视频 | 日韩r级电影在线观看 | 黄色国产成人 | 高清免费av在线 | 婷色| 欧美一级久久 | 91一区二区三区在线观看 | 97超碰在线资源 | 热久久电影 | 91久久人澡人人添人人爽欧美 | 丁香六月在线 | 99热在线网站 | 午夜精品影院 | 成年人av在线播放 | 日韩免费精品 | 在线观看欧美成人 | 国产在线国产 | 国产在线精品播放 | 人人看人人草 | 91av九色| 天天做天天爱夜夜爽 | 黄网站免费久久 | 日韩久久久久久久久 | 国产午夜麻豆影院在线观看 | 中文字幕久久精品亚洲乱码 | 国产精品久久久久一区 | 久久9视频 | 婷婷激情网站 | 在线观看国产区 | 99色在线观看视频 | 激情五月在线视频 | 丁香婷婷综合色啪 | 久久www免费视频 | 91在线porny国产在线看 | 精品一二区 | 人人精久 | 又色又爽的网站 | 中文字幕在线观看你懂的 | 深爱五月网 | 国产在线资源 | 探花视频在线观看免费版 | 色婷婷97 | 欧美一级裸体视频 | 亚洲成av人片一区二区梦乃 | 日韩精品免费一区二区 | 日韩在线视频播放 | 亚洲无吗av | 狠狠天天 | 国产又黄又硬又爽 | 亚洲精品视频国产 | 欧洲性视频 | 色婷婷色 | 青春草视频在线播放 | 免费观看成人网 | 亚洲国产精品久久久久 | 婷婷国产精品 | 麻豆91网站 | 国产探花视频在线播放 | 久久97久久97精品免视看 | 亚洲永久在线 | 免费成人av电影 | 亚洲传媒在线 | 亚洲成人精品影院 | www91在线| 麻豆国产网站 | 欧洲精品久久久久毛片完整版 | 日本精品视频在线 | 大型av综合网站 | 91成人免费电影 | 亚洲国产剧情 | 国内小视频在线观看 | 91免费网站在线观看 | 国产理论在线 | 久久综合五月 | 欧美精品国产综合久久 | 日韩高清免费观看 | 中文字幕黄色 | 久久综合中文字幕 | 日韩.com| 亚洲日日夜夜 | 久99久精品视频免费观看 | 午夜在线免费视频 | 日本护士撒尿xxxx18 | 日本一区二区免费在线观看 | 中文字幕二区在线观看 | 久久久久久久久综合 | 在线观看亚洲精品视频 | 久草99 | 国产精品18久久久 | 国产小视频在线播放 | 免费av在| 黄色大全免费观看 | 久久亚洲精品电影 | 欧美日韩aa| 欧美日韩国产在线观看 | 国产亚洲精品美女久久 | 久久久久成 | 婷婷亚洲激情 | 欧美日韩免费一区 | 亚洲久久视频 | 国内精品在线观看视频 | 人人爽影院 | 国产精品久久久久久久av电影 | 99久久婷婷国产一区二区三区 | 91一区二区在线 | 91香蕉视频 | 日本久久精品视频 | 伊香蕉大综综综合久久啪 | 欧美人牲| 婷婷亚洲五月 | 欧美aaa大片 | 亚洲天堂网在线播放 | 99精彩视频在线观看免费 | 亚洲精品免费在线播放 | 免费又黄又爽 | 色噜噜狠狠狠狠色综合 | 激情图片久久 | 久免费视频 | 亚洲日韩欧美一区二区在线 | 99色99| 色婷婷狠狠 | 天天爱天天干天天爽 | 福利久久久| 91av在线视频免费观看 | 中文字幕观看视频 | 少妇搡bbb | 国产高清在线免费观看 | 国产精品久久久久av福利动漫 | av超碰在线观看 | 九九久久久久久久久激情 | 丁香婷婷激情五月 | 欧美与欧洲交xxxx免费观看 | 亚洲人成在线观看 | 在线观看视频你懂的 | 男女全黄一级一级高潮免费看 | 国产女人40精品一区毛片视频 | 亚洲成a人片77777潘金莲 | 免费观看性生活大片3 | 久久伊99综合婷婷久久伊 | 福利片免费看 | 色综合久久五月天 | 欧美性粗大hdvideo | 美女视频久久黄 | 久久精品日本啪啪涩涩 | 成人久久国产 | 精品网站999www| 手机在线黄色网址 | 日韩免费电影在线观看 | av中文字幕不卡 | 天天操网 | 国产资源 | 亚洲成人免费 | 亚洲人av免费网站 | 日本中文字幕在线观看 | 又色又爽又黄高潮的免费视频 | 91精品免费在线观看 | 久久免费视频一区 | 天天色中文 | 日韩精选在线观看 | 亚洲成av人片 | 国产丝袜制服在线 | 天天草网站| 亚洲区另类春色综合小说校园片 | 2019精品手机国产品在线 | 五月婷婷中文 | 国产精品av久久久久久无 | 亚洲精品在线免费看 | 色综合亚洲精品激情狠狠 | 福利视频网站 | 丁香影院在线 | 国产色网 | 久久人人97超碰国产公开结果 | 亚洲日本一区二区在线 | 国产亚洲人成网站在线观看 | 日韩在线免费电影 | 亚洲人成网站精品片在线观看 | 视频91 | 国产理论一区二区三区 | 久久精品视频99 | 91视频一8mav | 国语对白少妇爽91 | 人人插人人舔 | 婷婷六月丁 | 99久久99视频只有精品 | 亚洲免费高清视频 | 在线中文字幕网站 | 亚洲高清久久久 | 五月天久久 | 午夜精品久久久久久久99水蜜桃 | 最近最新mv字幕免费观看 | 日本爽妇网 | 国产一区电影在线观看 | 精品久久久一区二区 | 白丝av在线 | 成人小视频在线播放 | 激情五月婷婷激情 | 久久精品久久综合 | 国产成人1区 | 青青草华人在线视频 | 成人久久国产 | 日本精品一区二区三区在线播放视频 | 狠狠色丁香久久婷婷综合_中 | 中文区中文字幕免费看 | 成人免费观看电影 | 色综合天天色综合 | 91精品在线观看入口 | 国产精品不卡视频 | 国产专区视频在线 | 麻豆一区二区 | 免费看国产一级片 | 久99视频 | 久久久午夜剧场 | 精品国产人成亚洲区 | 欧美一二三区在线播放 | 久久综合婷婷国产二区高清 | 在线看污网站 | 国产精品视频永久免费播放 | 久久国产精品一二三区 | 激情五月综合 | 贫乳av女优大全 | 日韩在线观 | 97香蕉久久超级碰碰高清版 | 午夜av在线免费 | 久久精品理论 | 欧美日韩后 | 久久你懂得 | 日韩色综合 | 中文字幕在线第一页 | 久久av免费观看 | 国产手机视频精品 | 日韩二区三区在线 | 久久久久久久久爱 | 国产精品成人久久久久 | 韩日视频在线 | 亚洲精品玖玖玖av在线看 | 日韩专区中文字幕 | 高清不卡免费视频 | 国产69精品久久app免费版 | 欧美激情精品久久久久久免费 | 91视频免费国产 | 婷婷伊人五月 | 天天综合五月天 | 久久99在线| 99精品美女 | 国产一级大片在线观看 | 999久久国产精品免费观看网站 | 欧美一二三视频 | 国产一区二区手机在线观看 | 午夜视频久久久 | 久久午夜免费观看 | 成 人 黄 色 视频免费播放 | 五月婷婷在线观看视频 | 青青草国产精品 | 日日操天天操狠狠操 | 九九热精品在线 | 久久看免费视频 | 亚洲第五色综合网 | 天天草天天插 | 婷婷在线免费视频 | 日韩欧美在线观看一区二区 | 国产成人精品一区二三区 | 国产精品久久久久久久久免费看 | 激情五月播播久久久精品 | 国产99久久久精品视频 | 亚洲精品久久久蜜桃直播 | 久久99国产一区二区三区 | 久草视频国产 | 中文字幕久久精品 | 六月久久婷婷 | 亚洲 欧美 日韩 综合 | 欧美日韩精 | 精品 一区 在线 | 亚洲 欧美 变态 国产 另类 | 综合网天天色 | 99久久精品免费看国产免费软件 | 精品亚洲免费 | 久久激情综合 | 国产精品视频专区 | 99亚洲天堂| 亚洲 中文 欧美 日韩vr 在线 | 麻豆免费视频 | 久久综合久久综合这里只有精品 | 丰满少妇在线观看资源站 | 久久精品中文字幕少妇 | 成人黄色电影在线播放 | 国产录像在线观看 | 国产精品videossex国产高清 | av高清免费| 国产精品久久久久婷婷 | 日韩免费一区 | 成人av中文字幕 | 国产区av在线 | 西西444www大胆无视频 | 亚洲高清视频在线观看免费 | 欧美性色黄大片在线观看 | 啪啪肉肉污av国网站 | 五月视频 | 国产福利在线不卡 | 精品国产一区二区三区久久久 | 国内精品视频免费 | 黄色网址在线播放 | 成年一级片 | 婷婷在线五月 | 国产视频久久久久 | 久久久91精品国产一区二区三区 | 欧美一区二区三区免费观看 | 成年人视频在线免费观看 | 亚洲少妇久久 | 久久99亚洲热视 | 手机看片中文字幕 | 国产一区二区三区网站 | 精品久久久久久亚洲综合网站 | 久久影视网 | 91精品国产92久久久久 | 欧美性色综合网 | 欧美亚洲一区二区在线 | 久久人人爽人人爽人人 | 天堂va在线高清一区 | 欧美一区二区在线刺激视频 | 欧美另类高清 | 最近中文字幕mv免费高清在线 | 亚洲精品中文在线观看 | 九九免费精品视频 | 亚洲精品视频网站在线观看 | 色婷婷电影 | 日韩手机在线观看 | 狠狠色伊人亚洲综合网站野外 | 碰超人人| 亚洲理论电影网 | 国产香蕉视频在线观看 | 天天操福利视频 | 在线视频久 | 日韩高清在线不卡 | 九九久久电影 | 亚洲美女在线一区 | 国产高清中文字幕 | 国产伦精品一区二区三区无广告 | 午夜性福利 | 在线91精品| 99久久精品久久久久久清纯 | 国产女人40精品一区毛片视频 | 中文字幕电影在线 | 婷婷激情综合五月天 | 蜜臀av在线一区二区三区 | 久久字幕网 | 日韩a免费 | 人人藻人人澡人人爽 | 热久久免费国产视频 | 国产91对白在线 | 美女视频黄频大全免费 | 婷婷六月丁香激情 | 精品国产一区二区三区久久久 | 免费av影视 | 欧美成a人片在线观看久 | 五月婷婷丁香色 | 亚洲欧美一区二区三区孕妇写真 | 福利视频一二区 | 奇米影视8888在线观看大全免费 | 婷婷免费在线视频 | 国产资源在线视频 | 国产精品久久中文字幕 | 日韩欧美v | 成人午夜影院在线观看 | 特及黄色片 | 中文字幕在线观看完整版电影 | 69国产盗摄一区二区三区五区 | 人人澡澡人人 | 国产精品一区二区三区在线免费观看 | 亚洲五月综合 | 色婷婷av国产精品 | av在线成人 | 国产精品美女久久久久久久久 | 日韩免费不卡av | 国产黄色成人 | 久久成视频 | 激情av一区二区 | 国产999视频| 色婷婷啪啪免费在线电影观看 | 九九热免费在线视频 | 国产人在线成免费视频 | 免费视频你懂的 | 亚洲精品网站 | 四虎成人精品永久免费av | 亚洲日韩精品欧美一区二区 | 国语自产偷拍精品视频偷 | 激情五月婷婷综合 | 91片黄在线观看动漫 | 久久久综合九色合综国产精品 | 亚洲伦理一区二区 | 亚洲欧美日韩精品一区二区 | 超碰国产在线 | av官网在线 | 欧美一区二区三区四区夜夜大片 | 欧美色噜噜| 很黄很黄的网站免费的 | aaa亚洲精品一二三区 | 四虎在线免费观看视频 | 国产高清av | avv天堂| 日本女人在线观看 | 黄视频色网站 | 91av网址| 日韩久久在线 | 久久免视频 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲精品一区二区网址 | 国产一区二区在线免费视频 | 国产成人精品日本亚洲999 | 欧美狠狠操 | 99热精品国产 | 丁香婷婷激情国产高清秒播 | 久久人人97超碰国产公开结果 | 蜜臀久久99静品久久久久久 | 久久精品视频在线 | 久久久久久欧美二区电影网 | 操操色 | 99亚洲国产 | 日韩偷拍精品 | 91热这里只有精品 | 九九久久久 | 久久在线| 国产一区二区精品久久 | 亚洲国产精品资源 | 国产麻豆精品95视频 | 国产精品s色 | 久久久久久不卡 | 97在线免费视频观看 | 91成品视频 | 波多野结衣电影一区二区 | 日韩精品中文字幕一区二区 | 亚洲国产伊人 | 欧美日性视频 | 一区二区三区日韩视频在线观看 | av青草| 黄色一及电影 | 波多野结衣综合网 | 免费久久网| 国产精品视频999 | 日韩午夜剧场 | 黄色免费在线视频 | 中文久草 | 欧美一二三区在线观看 | 青青河边草免费直播 | 在线免费观看视频一区二区三区 | www.人人干| 日批在线看 | 成年人免费在线播放 | 国产亚洲精品久久久久久 | 日日爱av | 最近免费中文字幕mv在线视频3 | 国产精品网站一区二区三区 | 中文字幕91| 国产亚洲午夜高清国产拍精品 | 久久精品一区二区三区四区 | 97超碰伊人| 91视视频在线直接观看在线看网页在线看 | 成人免费视频在线观看 | 亚洲美女精品区人人人人 | 91九色国产蝌蚪 | 久久精品网站视频 | 欧美日韩xxxxx| 午夜国产在线观看 | 91精品伦理 | 国产午夜精品视频 | 久久这里只有精品视频99 |