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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

动态规划DP题单 AcWing算法基础课 (详解)

發(fā)布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划DP题单 AcWing算法基础课 (详解) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 背包問題
    • 背包問題初始化總結(jié)
    • AcWing 2. 01背包問題
    • AcWing 3. 完全背包問題
    • AcWing 4. 多重背包問題
    • AcWing 5. 多重背包問題 II
    • AcWing 9. 分組背包問題
  • 線性DP
    • AcWing 898. 數(shù)字三角形
    • AcWing 895. 最長上升子序列
    • AcWing 896. 最長上升子序列 II(貪心)
    • AcWing 897. 最長公共子序列
    • AcWing 902. 最短編輯距離
    • AcWing 899. 編輯距離
  • 區(qū)間DP
    • AcWing 282. 石子合并(minminmin
  • 計數(shù)類DP
    • AcWing 900. 整數(shù)劃分(完全背包求方案數(shù),體積恰好)
  • 數(shù)位統(tǒng)計DP
    • AcWing 338. 計數(shù)問題
  • 狀態(tài)壓縮DP
    • AcWing 291. 蒙德里安的夢想
    • AcWing 91. 最短Hamilton路徑
  • 樹形DP
    • AcWing 285. 沒有上司的舞會
  • 記憶化搜索
    • AcWing 901. 滑雪

背包問題

背包問題初始化總結(jié)


總的來說就是 :求方案數(shù),f[0]=1f[0]=1f[0]=1;求最大/最小值 :f[0]=0f[0]=0f[0]=0

AcWing 2. 01背包問題

#include <bits/stdc++.h> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1e3 + 10;int f[N];int main() {IOS;int n, m;cin >> n >> m;for (int i = 0; i < n; i ++ ){int v, w;cin >> v >> w;for (int j = m; j >= v; j -- )f[j] = max(f[j], f[j - v] + w);}cout << f[m] << endl;return 0; }

AcWing 3. 完全背包問題


其實(shí)就是把01背包j循環(huán)層倒過來寫啊(

#include <bits/stdc++.h> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1e3 + 10;int f[N];int main() {IOS;int n, m;cin >> n >> m;for (int i = 0; i < n; i ++ ){int v, w;cin >> v >> w;for (int j = v; j <= m; j ++ )f[j] = max(f[j], f[j - v] + w);}cout << f[m] << endl;return 0; }

AcWing 4. 多重背包問題


數(shù)據(jù)范圍非常小,暴力枚舉

#include <bits/stdc++.h> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 110;int f[N];int main() {IOS;int n, m;cin >> n >> m;for (int i = 0; i < n; i ++ ){int v, w, s;cin >> v >> w >> s;for (int j = m; j >= v; j -- )for (int k = 0; k <= s && k * v <= j; k ++ )f[j] = max(f[j], f[j - k * v] + k * w);}cout << f[m] << endl;return 0; }

AcWing 5. 多重背包問題 II

二進(jìn)制表示法 : 把sss拆成log(s)log(s)log(s)份就可以表示出0 ~sss的所有的數(shù),不再需要s份(s個1)
原來的復(fù)雜度是O(N?V?S)O(N * V * S)O(N?V?S),現(xiàn)在是O(N?V?log(S))O(N * V * log(S))O(N?V?log(S))

#include <bits/stdc++.h> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 2e3 + 10;struct Good {int v, w; };int f[N];int main() {IOS;int n, m;cin >> n >> m;vector<Good> goods;for (int i = 0; i < n; i ++ ){int v, w, s;cin >> v >> w >> s;for (int k = 1; k <= s; k *= 2){goods.push_back({k * v, k * w});s -= k;}if (s > 0) goods.push_back({s * v, s * w});}// 得到了我們需要的物品組 :goods,問題轉(zhuǎn)化為了01背包for (auto good : goods)for (int j = m; j >= good.v; j -- )f[j] = max(f[j], f[j - good.v] + good.w);cout << f[m] << endl;return 0; }

AcWing 9. 分組背包問題

/*for (int i = 0; i < n; i ++ )for (int j = m; j >= 0; j -- )f[j] = max(f[j], f[j - v[0]] + w[0], f[j - v[1]] + w[1], ..., f[j - v[s - 1]] + w[s - 1]);即 f[i][j] 表示只考慮前i組物品,體積至多為j的選法集合每個組內(nèi)有s + 1種決策即 每個組內(nèi)選1個(包含0個的情況)與其他組選出來的進(jìn)行01背包*/#include <bits/stdc++.h> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 110;int v[N], w[N], f[N];int main() {IOS;int n, m;cin >> n >> m;for (int i = 0; i < n; i ++ ){int s;cin >> s;for (int j = 0; j < s; j ++ ) cin >> v[j] >> w[j];for (int j = m; j >= 0; j -- )for (int k = 0; k < s; k ++ )if (j >= v[k]) // 可以選這個f[j] = max(f[j], f[j - v[k]] + w[k]);}cout << f[m] << endl;return 0; }

線性DP

AcWing 898. 數(shù)字三角形

  • 路線問題,一般狀態(tài)表示可以用坐標(biāo)
  • f[i][j]f[i][j]f[i][j]表示從底向上走到(i,j)(i, j)(i,j)的所有路線的集合,屬性是maxmaxmax
  • f[i][j]=max(f[i+1][j],f[i+1][j+1])+w[i][j]f[i][j] = max(f[i+1][j],f[i+1][j+1])+w[i][j]f[i][j]=max(f[i+1][j],f[i+1][j+1])+w[i][j]
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 510;int w[N][N], f[N][N];int main() {int n;cin >> n;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= i; j ++ )cin >> w[i][j];for (int i = 1; i <= n; i ++ ) f[n][i] = w[n][i];for (int i = n - 1; i ; i -- )for (int j = 1; j <= i; j ++ )f[i][j] = max(f[i + 1][j], f[i + 1][j + 1]) + w[i][j];cout << f[1][1] << endl;return 0; }

AcWing 895. 最長上升子序列

  • f[i][j]f[i][j]f[i][j]表示所有以第i個數(shù)結(jié)尾的上升子序列,屬性是maxmaxmax
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1010;int a[N], f[N];int main() {int n;cin >> n;for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ){f[i] = 1;for (int j = 1; j < i; j ++ )if (a[j] < a[i])f[i] = max(f[i], f[j] + 1);}int res = 0;for (int i = 1; i <= n; i ++ ) res = max(res, f[i]);cout << res << endl;return 0; }

AcWing 896. 最長上升子序列 II(貪心)

  • 相同長度的上升子序列中結(jié)尾的數(shù)字越小越好,所以我們想到記錄不同長度下同一長度的上升子序列結(jié)尾數(shù)字的最小值。
  • 會發(fā)現(xiàn),這個序列是單調(diào)遞增的。每個插入一個新的數(shù),可以二分找到小于它的數(shù)中最大的數(shù),即qj<aiq_j<a_iqj?<ai?,又有qj+1>=aiq_{j+1}>=a_iqj+1?>=ai?,把aia_iai?接在qjq_jqj?后面,再用aia_iai?代替qj+1q_{j+1}qj+1?
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1e5 + 10;int a[N], q[N];int main() {int n;cin >> n;for (int i = 0; i < n; i ++ ) cin >> a[i];int len = 0; // 當(dāng)前最大長度 / q中元素個數(shù)q[0] = -2e9; // 二分的邊界問題,為了保證數(shù)組中小于某個數(shù)的最大的數(shù)一定存在,q[0]是一個哨兵for (int i = 0; i < n; i ++ ){int l = 0, r = len;while (l < r){// 找比a[i]小的中最大的int mid = l + r + 1 >> 1;if (q[mid] < a[i]) l = mid;else r = mid - 1;}len = max(len, r + 1);q[r + 1] = a[i];}cout << len << endl;return 0; }

AcWing 897. 最長公共子序列

  • f[i][j]f[i][j]f[i][j]表示A[1,i],B[1,j]A[1, i],B[1,j]A[1,i],B[1,j]中公共子序列的集合,屬性是公共子序列最長的長度,即求maxmaxmax
  • 根據(jù)a[i],b[j]a[i],b[j]a[i],b[j]是否在公共子序列中可以將f[i][j]f[i][j]f[i][j]劃分成00,10,01,1100,10,01,1100,10,01,11,分別對應(yīng)f[i?1][j?1],f[i][j?1],f[i?1][j],f[i?1][j?1]+1f[i-1][j-1],f[i][j-1],f[i-1][j],f[i-1][j-1]+1f[i?1][j?1],f[i][j?1],f[i?1][j],f[i?1][j?1]+1
  • 其實(shí)中間兩種情況用這兩個代替是有重復(fù)的,因?yàn)?span id="ozvdkddzhkzd" class="katex--inline">f[i?1][j]f[i-1][j]f[i?1][j]本身包含s[j]s[j]s[j]本身在公共子序列中和不在公共子序列中兩種情況,但由于求最大值,所以重復(fù)沒關(guān)系,且s[j]s[j]s[j]本身不是公共子序列的情況也包含在f[i][j]f[i][j]f[i][j]
  • f[i?1][j?1]f[i-1][j-1]f[i?1][j?1]包含在后兩者的情況中,所以可以省略。
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1010;char a[N], b[N]; int f[N][N];int main() {int n, m;cin >> n >> m >> a + 1 >> b + 1;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ ){f[i][j] = max(f[i - 1][j], f[i][j - 1]);if (a[i] == b[j])f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);}cout << f[n][m] << endl;return 0; }

AcWing 902. 最短編輯距離

  • f[i][j]f[i][j]f[i][j]表示所有將a[1,i]a[1,i]a[1,i]變成b[1,j]b[1,j]b[1,j]的操作方式,屬性為minminmin
  • “增”“刪”“改”分別對應(yīng)f[i][j]=min(f[i?1][j]+1,f[i][j?1]+1,f[i?1][j?1]+1/0)f[i][j]=min(f[i-1][j]+1,f[i][j-1]+1,f[i-1][j-1]+1/0)f[i][j]=min(f[i?1][j]+1,f[i][j?1]+1,f[i?1][j?1]+1/0)
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1010;char a[N], b[N]; int f[N][N];int main() {int n, m;cin >> n >> a + 1 >> m >> b + 1;for (int i = 0; i <= n; i ++ ) f[i][0] = i;for (int i = 0; i <= m; i ++ ) f[0][i] = i;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ ){f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;if (a[i] == b[j]) f[i][j] = min(f[i][j], f[i - 1][j - 1]);else f[i][j] = min(f[i][j], f[i - 1][j - 1] + 1);}cout << f[n][m] << endl;return 0; }

AcWing 899. 編輯距離


注意頭文件。

#include <iostream> #include <algorithm> #include <cstring> #include <string> #include <cmath> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 15, M = 1010;char str[M][N]; int f[N][N];int edit_distance(char a[], char b[]) {int lena = strlen(a + 1), lenb = strlen(b + 1);for (int i = 0; i <= lena; i ++ ) f[i][0] = i;for (int i = 0; i <= lenb; i ++ ) f[0][i] = i;for (int i = 1; i <= lena; i ++ )for (int j = 1; j <= lenb; j ++ ){f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;if (a[i] == b[j]) f[i][j] = min(f[i][j], f[i - 1][j - 1]);else f[i][j] = min(f[i][j], f[i - 1][j - 1] + 1);}return f[lena][lenb]; }int main() {int n, m;cin >> n >> m;for (int i = 0; i < n; i ++ ) cin >> str[i] + 1;while (m -- ){char s[N];int limit;cin >> s + 1 >> limit;int res = 0;for (int i = 0; i < n; i ++ )if (edit_distance(s, str[i]) <= limit) res ++ ;cout << res << endl;}return 0; }

區(qū)間DP

AcWing 282. 石子合并(minminmin

  • 每次合并相鄰兩堆,因此不是貪心問題。
  • 所有不同的合并順序顯然有(n?1)!(n-1)!(n?1)!(因?yàn)槊看蜗噜弮蓚€)。
  • 相鄰,因此最后必然是將左一堆和右一堆合并的情形,因此聯(lián)想到f[i,j]f[i,j]f[i,j]表示將區(qū)間[i,j][i,j][i,j]合并成一堆的方案的集合,屬性是minminmin,而分類依據(jù)就是兩堆的分界點(diǎn),由于左右兩堆分別獨(dú)立,要總的最小,就分別取最小。這樣f[i,j]f[i,j]f[i,j]一個狀態(tài)就可以表示(j?i)!(j-i)!(j?i)!個方案。
  • O(n2?k)==O(n3)O(n^2*k)==O(n^3)O(n2?k)==O(n3)
  • 由于求最小值,因此注意初始化。
  • 要枚舉不同長度的子序列(連續(xù)),可以第一層枚舉長度。
  • 狀態(tài)計算 :i < j;i = j時,f[i][i] = 0(合并一堆石子代價為0)
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #include <sstream> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 310;int w[N]; int f[N][N];int main() {int n;cin >> n;for (int i = 1; i <= n; i ++ ) cin >> w[i], w[i] += w[i - 1];for (int len = 2; len <= n; len ++ ){for (int i = 1; i + len - 1 <= n; i ++ ){int j = i + len - 1;f[i][j] = 2e9;for (int k = i + 1; k <= j; k ++ ){f[i][j] = min(f[i][j], f[i][k - 1] + f[k][j] + w[j] - w[i - 1]);}}}cout << f[1][n] << endl;return 0; }
  • 記憶化搜索 :

計數(shù)類DP

AcWing 900. 整數(shù)劃分(完全背包求方案數(shù),體積恰好)

  • 由于不考慮組合的數(shù)的順序,因此直接就是完全背包問題了。從1-i中選,體積恰好為j的方案集合。
  • f[i,j]=f[i?1,j]+f[i?1,j?i]+f[i?1,j?2i]+...f[i,j]=f[i-1,j]+f[i-1,j-i]+f[i-1,j-2i]+...f[i,j]=f[i?1,j]+f[i?1,j?i]+f[i?1,j?2i]+...
  • f[i,j?i]=f[i?1,j?i]+f[i?1,j?2i]+...f[i,j-i]=f[i-1,j-i]+f[i-1,j-2i]+...f[i,j?i]=f[i?1,j?i]+f[i?1,j?2i]+...
  • 因此,f[i,j]=f[i,j?i]+f[i?1,j]f[i,j]=f[i,j-i]+f[i-1,j]f[i,j]=f[i,j?i]+f[i?1,j],即,f[j]=f[j?i]+f[j]f[j]=f[j-i]+f[j]f[j]=f[j?i]+f[j],且體積層從小到大循環(huán)。
  • 神奇的是雖然這題結(jié)果可能很大,需要取模,但不需要long long。
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <ctime> #include <sstream> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define lowbit(x) (x&-x) using namespace std; const double pi = acos(-1); typedef long long ll; typedef pair<int, int> PII; typedef pair<long, long> PLL;const int N = 1e3 + 10, mod = 1e9 + 7;int f[N];int main() {int n;cin >> n;f[0] = 1;for (int i = 1; i <= n; i ++ )for (int j = i; j <= n; j ++ )f[j] = (f[j] + f[j - i]) % mod;cout << f[n] << endl;return 0; }

數(shù)位統(tǒng)計DP

AcWing 338. 計數(shù)問題

#include <iostream> #include <algorithm> #include <cmath>using namespace std;int get(int n) { // 求數(shù)n的位數(shù)int res = 0;while (n) res ++, n /= 10;return res; }int count(int n, int i) { // 求從1到數(shù)n中數(shù)i出現(xiàn)的次數(shù)int res = 0, dgt = get(n);for (int j = 1; j <= dgt; ++ j) {/* p為當(dāng)前遍歷位次(第j位)的數(shù)大小 <10^(右邊的數(shù)的位數(shù))>,l為第j位的左邊的數(shù),r為右邊的數(shù),dj為第j位上的數(shù) */int p = pow(10, dgt - j), l = n / p / 10, r = n % p, dj = n / p % 10;// ps:下文的xxx、yyy均只為使讀者眼熟,并不嚴(yán)格只是三位數(shù)啊~ 然后后續(xù)的...就代表省略的位數(shù)啦~/* 求要選的數(shù)在i的左邊的數(shù)小于l的情況: (即視頻中的xxx1yyy中的xxx的選法) --->1)、當(dāng)i不為0時 xxx : 0...0 ~ l - 1, 即 l * (右邊的數(shù)的位數(shù)) == l * p 種選法2)、當(dāng)1位0時 由于不能有前導(dǎo)零 故xxx: 0....1 ~ l - 1, 即 (l-1) * (右邊的數(shù)的位數(shù)) == (l-1) * p 種選法 */if (i) res += l * p;else res += (l - 1) * p;/* 求要選的數(shù)在i的左邊的數(shù)等于l的情況:(即視頻中的xxx == l 時)(即視頻中的xxx1yyy中的yyy的選法)--->1)、i > dj時 0種選法2)、i == dj時 yyy : 0...0 ~ r 即 r + 1 種選法3)、i < dj時 yyy : 0...0 ~ 9...9 即 10^(右邊的數(shù)的位數(shù)) == p 種選法 */if (i == dj) res += r + 1;if (i < dj) res += p;}return res; // 返回結(jié)果 }int main() {int a, b;while (cin >> a >> b, a) { // 輸入處理,直到輸入為0停止if (a > b) swap(a, b); // 預(yù)處理-->讓a為較小值,b為較大值for (int i = 0; i <= 9; ++ i) cout << count(b, i) - count(a - 1, i) << ' '; // 輸出每一位數(shù)字(0 ~ 9)分別在[a,b]中出現(xiàn)的次數(shù)<利用前綴和思想:[l,r]的和=s[r] - s[l - 1]>cout << endl; //換行}return 0; // 慣例:結(jié)束快樂~ }

狀態(tài)壓縮DP

AcWing 291. 蒙德里安的夢想

  • 放方塊時,先放橫著的再放豎著的,總方案數(shù)等于只放橫著的方塊的合法方案數(shù)。
  • 合法方案數(shù) 即 所有剩余位置能用豎著的方塊填滿。從每列來看,每列內(nèi)部所有連續(xù)的空著的方塊是偶數(shù)個。
  • 用一個NNN位的二進(jìn)制數(shù),每一位表示一個物品,0/1表示不同狀態(tài),因此可以用0~2n?12^n-12n?1
    中的數(shù)來枚舉全部的狀態(tài)。
  • f[i,j]f[i,j]f[i,j]表示已將前i?1i-1i?1列擺好,且從第i?1i-1i?1列伸出到第iii列的狀態(tài)是jjj的所有方案,其中jjj是一個二進(jìn)制數(shù),用來表示哪一行的方塊是橫著放的,其位數(shù)和棋盤行數(shù)一致。
#include <iostream> #include <vector> #include <cstring>using namespace std;const int N = 12, M = 1 << N; // M = 2^Ntypedef long long LL;LL f[N][M]; // 第一維表示列, 第二維表示所有可能的狀態(tài)bool st[M]; // 存儲每種狀態(tài)是否有奇數(shù)個連續(xù)的0, 如果奇數(shù)個0則是無效狀態(tài),如果是偶數(shù)個零置為trueint n, m;// vector<int> state[M]; // 二維數(shù)組記錄合法的狀態(tài) vector<vector<int>> state(M); // 兩種寫法等價 : 二維數(shù)組int main() {while (cin >> n >> m, n || m){// 第一部分 : 預(yù)處理1// 對于每種狀態(tài),先預(yù)處理每列不能有奇數(shù)個連續(xù)的0for (int i = 0; i < 1 << n; i ++ ) // i -> [0, 2 ^ n - 1]{int cnt = 0; // 記錄連續(xù)的0的個數(shù)bool isValid = true; // 某種狀態(tài)沒有奇數(shù)個連續(xù)的0則為truefor (int j = 0; j < n; j ++ ) // 遍歷這一列, 從上到下{if (i >> j & 1) // i >> j位運(yùn)算,表示i(i在此處是一種狀態(tài))的二進(jìn)制數(shù)的第j位,如果這第j位是1,則進(jìn)入if{if (cnt & 1) // 如果這一位是1,看前面連續(xù)的0的個數(shù),如果是奇數(shù)(cnt & 1 為真)則不合法{isValid = false;break;}cnt = 0; // 既然該位是1,則到這里0就斷了, cnt清零}else cnt ++ ;}if (cnt & 1) isValid = false; // 最下面的那一段判斷連續(xù)的0的個數(shù)st[i] = isValid; // 狀態(tài)i是否有奇數(shù)個連續(xù)的0的情況,輸入到st數(shù)組中}// 第二部分 : 預(yù)處理2// 經(jīng)過上面每種狀態(tài) 連續(xù)0的判斷,已經(jīng)篩掉一些狀態(tài)// 下面來看進(jìn)一步的判斷 : 看第i - 2列滲出來的和第i - 1列伸出去的是否沖突for (int j = 0; j < 1 << n; j ++ ) // 對于第i列的所有狀態(tài){state[j].clear(); // 清空上次操作遺留的狀態(tài),防止影響本次狀態(tài)for (int k = 0; k < 1 << n; k ++ ) // 對于第i - 1列的所有狀態(tài){if ((j & k) == 0 && st[j | k]) // 第i - 2列和第i - 1列伸出來的不沖突(不在同一行)// (j & k) == 0 表示j和k沒有一位同時為1,即沒有一列有沖突// 解釋一下st[j | k] :// 已經(jīng)知道st[]數(shù)組表示的是這一列沒有奇數(shù)個連續(xù)的0的情況// 我們要考慮的是第i - 1列(第i - 1列是這里的主體)中從第i - 2列中橫插過來的和第i - 1列橫插到第i列的// 比如第i - 2列插到第i - 1列的是k = 10101, 第i - 1列插去第i列的是 j = 01000// 那么合在第i - 1列,到底有多少個1呢 ?自然想到的是這兩個操作共同的結(jié)果 :兩個狀態(tài)或(都是0才是0)。 j | k == 01000 | 10101 == 11101// 這個j | k就是當(dāng)前第i - 1列的到底有幾個1,即哪幾行是橫著放格子的state[j].push_back(k);// j 表示第i列"真正"可行的狀態(tài), 如果第i - 1列的狀態(tài)k和j不沖突則壓入state數(shù)組中的第j行// "真正"可行是指 : 既沒有前后兩列伸進(jìn)伸出的沖突;又沒有奇數(shù)個連續(xù)的0}}// 第三部分 :dp開始memset(f, 0, sizeof f); // 全部初始化為0,因?yàn)槭沁B續(xù)讀入,這里是一個清空操作f[0][0] = 1; // 回憶狀態(tài)表示的定義 : 前i - 1列都已經(jīng)擺好,且從第-1列第0列伸出來的狀態(tài)為0的方案數(shù)// 首先這里沒有第-1列,最少也是第0列。其實(shí),沒有伸出來的,就是沒有橫著擺的,即這個第0列只有豎著擺的這1種狀態(tài)// 由于前i-1列已經(jīng)放好 的 這個定義,所以是從第一行開始而不是第零行for (int i = 1; i <= m; i ++ ) // 遍歷每一列for (int j = 0; j < 1 << n; j ++ ) // 遍歷當(dāng)前列(第i列)的所有狀態(tài)for (auto k : state[j]) // 遍歷第i - 1列的狀態(tài)k,如果"真正"可行,就轉(zhuǎn)移f[i][j] += f[i - 1][k]; // 當(dāng)前列的方案數(shù)就等于之前的第i - 1列所有狀態(tài)k的累加// 最后答案是什么呢?// f[m][0]表示前m - 1列都已經(jīng)處理完,并且第m - 1列沒有伸出來的方案數(shù)// 即整個棋盤處理完的方案數(shù)cout << f[m][0] << endl;} }

AcWing 91. 最短Hamilton路徑

  • HamiltonHamiltonHamilton路徑 :把每個點(diǎn)經(jīng)過一次且只經(jīng)過一次
  • 從0走到n?1n-1n?1 :首先確定走到順序n!n!n!,計算路徑長度 :n!?nn! * nn!?n
  • f[i,j]f[i,j]f[i,j]表示已經(jīng)走過的所有點(diǎn)是iii,已經(jīng)走到了jjj點(diǎn)的所有路徑。
  • 根據(jù)倒數(shù)第二個點(diǎn)是什么進(jìn)行分類。
#include <iostream> #include <cstring>using namespace std;const int N = 20, M = 1 << N;int n; int f[M][N]; int w[N][N];int main() {cin >> n;for (int i = 0; i < n; i ++ )for (int j = 0; j < n; j ++ )cin >> w[i][j];memset(f, 0x3f, sizeof f);f[1][0] = 0;for (int i = 0; i < 1 << n; i ++ )for (int j = 0; j < n; j ++ )if (i >> j & 1)for (int k = 0; k < n; k ++ )if (i - (1 << j) >> k & 1)f[i][j] = min(f[i][j], f[i - (1 << j)][k] + w[k][j]);cout << f[(1 << n) - 1][n - 1] << endl;//位運(yùn)算的優(yōu)先級低于'+'-'所以有必要的情況下要打括號return 0; }

樹形DP

AcWing 285. 沒有上司的舞會

  • 翻譯 :選了某個節(jié)點(diǎn)就不能選擇它的父節(jié)點(diǎn)和子節(jié)點(diǎn),求最大權(quán)值和。
#include <iostream> #include <cstring>using namespace std;const int N = 6010;int n; int e[N], ne[N], h[N], idx; int w[N]; int f[N][2]; bool st[N]; // 是否有父節(jié)點(diǎn)void add(int a, int b) {e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ; }void dfs(int u) {// f[u][0] = 0;f[u][1] = w[u];for (int i = h[u]; ~i; i = ne[i]) // ~i == i != -1{int j = e[i];dfs(j);// 兩種情況都是 +=f[u][1] += f[j][0];f[u][0] += max(f[j][1], f[j][0]);} }int main() {cin >> n;for (int i = 1; i <= n; i ++ ) cin >> w[i];memset(h, -1, sizeof h); // 不初始化圖見祖宗for (int i = 1; i <= n - 1; i ++ ){int a, b;cin >> a >> b;add(b, a);st[a] = true;}int root = 1;while (st[root]) ++ root;dfs(root);cout << max(f[root][0], f[root][1]) << endl;return 0; }

記憶化搜索

AcWing 901. 滑雪

  • f[i,j]f[i,j]f[i,j]表示所有從(i,j)(i,j)(i,j)開始滑的路徑
#include <iostream> #include <cstring>using namespace std;const int N = 310;int n, m; int h[N][N]; int f[N][N];int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};int dp(int x, int y) {int &v = f[x][y]; // 使用"&",相當(dāng)于下面每次用到v其實(shí)可以換成f[x][y]if (v != -1) return v; // 記憶化搜索v = 1;for (int i = 0; i < 4; i ++ ){int a = x + dx[i], b = y + dy[i];if (a >= 0 && a < n && b >= 0 && b < m && h[a][b] < h[x][y])v = max(v, dp(a, b) + 1);}return v; }int main() {cin >> n >> m;for (int i = 0; i < n; i ++ )for (int j = 0; j < m; j ++ )cin >> h[i][j];memset(f, -1, sizeof f);int res = 0;for (int i = 0; i < n; i ++ )for (int j =0 ; j < m; j ++ )res = max(res, dp(i, j));cout << res << endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的动态规划DP题单 AcWing算法基础课 (详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

丁香六月婷婷开心 | 国产露脸91国语对白 | 久久久2o19精品 | 96亚洲精品久久久蜜桃 | 国产码电影 | 国产在线视频一区 | 精品国内 | 国内精品国产三级国产aⅴ久 | 99精品免费久久久久久久久 | 在线免费日韩 | 偷拍精偷拍精品欧洲亚洲网站 | 精品国产_亚洲人成在线 | 玖玖视频免费在线 | 天天干夜夜爽 | 黄色福利网 | 久久综合中文色婷婷 | 久草在线视频资源 | 亚洲成年人在线播放 | 国产专区在线 | 超碰人人草 | 亚洲欧洲精品一区二区精品久久久 | 六月丁香婷婷网 | 国产中文字幕视频在线观看 | 中字幕视频在线永久在线观看免费 | 国产一区二区久久精品 | 国产亚洲婷婷 | 一级黄视频| 天天插天天操天天干 | 国产69精品久久久久久久久久 | 久久最新视频 | 日韩免费大片 | 在线观看激情av | 探花国产在线 | 91精品视频在线看 | 国产视频不卡一区 | 久久久久久毛片精品免费不卡 | 五月婷婷色 | 欧美日韩在线第一页 | 伊人久久精品久久亚洲一区 | 欧美日bb | 天天操夜夜操国产精品 | 色94色欧美 | 狠狠干干 | 亚洲 欧美 变态 国产 另类 | 国产中文在线观看 | 天天射综合网视频 | 久久精品欧美 | 国产中文字幕视频在线观看 | 色综合久久88色综合天天 | 国产91探花 | 日韩欧美网址 | 久久久久激情电影 | 国产一级电影免费观看 | 99在线视频精品 | 久久a久久 | 激情网综合 | 色噜噜色噜噜 | 国产在线一区观看 | 免费一级黄色 | 91精品国产综合久久久久久久 | 精品福利在线视频 | 久久情爱 | 亚洲成人精品久久 | 天天久久综合 | 五月婷婷亚洲 | av在线收看 | 日韩视频中文字幕在线观看 | 欧美精品黑人性xxxx | 一区二区激情 | 中文视频在线看 | 久久久久免费精品视频 | 国产 欧美 日产久久 | 色婷婷国产精品 | www.综合网.com | a级国产乱理伦片在线播放 久久久久国产精品一区 | 天堂在线v | www.日本色 | 国产免费观看久久黄 | 午夜视频亚洲 | 亚洲精品美女久久久 | 久久国产成人午夜av影院潦草 | 麻豆视频免费看 | av丁香 | 欧美亚洲久久 | 国内精品福利视频 | 激情喷水| 91精品专区| 99久久精品国产亚洲 | 成人午夜片av在线看 | www.天天草 | 91夜夜夜| 久久久久免费视频 | 免费在线黄网 | 成人福利在线播放 | 玖玖在线观看视频 | 91久久精品一区二区二区 | 国产一区在线播放 | 天天av在线播放 | 天天天色综合 | 日本h在线播放 | 欧美a视频 | 久久麻豆视频 | 欧美精品久久人人躁人人爽 | 国产精品久久久久久久久大全 | 中文字幕一区在线观看视频 | 成年人免费电影 | 成人久久18免费网站麻豆 | 涩涩色亚洲一区 | 91av精品 | 久久免费精品一区二区三区 | 黄色一及电影 | 免费一级日韩欧美性大片 | 午夜影院三级 | 久久一区国产 | 日韩电影一区二区三区 | 色人久久| 成人一区二区在线 | 国产精品一区二区久久国产 | 亚洲一区精品二人人爽久久 | 69av在线视频 | 99热精品视 | 99久久精品国产亚洲 | 97国产精品 | 欧美午夜寂寞影院 | 国产96在线 | 免费看污黄网站 | 日韩亚洲在线视频 | 日韩色在线 | 91成年人视频 | 男女啪啪免费网站 | 亚洲午夜av电影 | 午夜视频在线瓜伦 | 国产精品专区h在线观看 | 日本成人免费在线观看 | 中文字幕在线看视频国产中文版 | 九九欧美| 91麻豆精品国产午夜天堂 | 蜜臀久久99静品久久久久久 | 天天干天天插 | 99精品小视频| av高清在线观看 | 亚洲综合色丁香婷婷六月图片 | 久久久毛片 | 色综合www | 久久99网站 | 日日夜精品 | 黄色特级片 | 亚洲成免费 | 欧美乱熟臀69xxxxxx | 激情动态| 18做爰免费视频网站 | 亚洲婷婷免费 | 91福利区一区二区三区 | 国产综合在线视频 | 在线影院中文字幕 | 国产成人精品综合久久久 | 成人av网站在线播放 | 丁香六月婷婷激情 | 精品国产伦一区二区三区观看说明 | 国产视频 亚洲精品 | av在线播放一区二区三区 | 国内久久精品视频 | 精品国产诱惑 | 一二区精品 | 久久久久色 | 国产香蕉久久精品综合网 | 色婷婷www | 九九涩涩av台湾日本热热 | 久久99欧美 | 亚洲精品午夜aaa久久久 | 香蕉久草在线 | 久久激情日本aⅴ | 久久av免费 | 中文国产字幕 | 亚洲精品一区二区在线观看 | 日日夜夜网站 | 国产成人精品一区二区三区在线观看 | 天天艹天天操 | 国产精品久久久久国产精品日日 | 国内精品久久久久久久久 | 狠狠色噜噜狠狠狠合久 | 探花视频在线版播放免费观看 | 久久精品视频在线免费观看 | 欧美日韩高清不卡 | 91伊人久久大香线蕉蜜芽人口 | 天天碰天天操 | 亚洲 欧洲av| 91成人网在线 | 欧美夫妻生活视频 | 日韩免费成人 | 久久不射电影网 | 中文字幕在线视频一区二区三区 | 欧美二区在线播放 | h视频日本| 97在线观看免费观看高清 | 日韩免费视频播放 | 精品一区二区三区四区在线 | www色片| 国产99久久久国产精品免费看 | 18做爰免费视频网站 | 免费中文字幕视频 | 在线视频 精品 | 中文字幕资源网在线观看 | 国产精品一区二区久久久久 | 国产美女网 | 国产精品门事件 | 精品国偷自产在线 | 综合av在线| 狠狠色丁香九九婷婷综合五月 | av免费看在线 | 国产99久久久久久免费看 | 一级黄色网址 | 91九色在线| 国产精品视频资源 | 欧美日韩3p | 久久99电影 | 日韩a在线播放 | 亚洲美女精品区人人人人 | 在线国产91 | 亚洲免费视频观看 | 欧洲成人av | 色综合亚洲精品激情狠狠 | 久久精品视频在线免费观看 | 亚洲精品久久久久999中文字幕 | 久久免费视频精品 | 亚洲在线视频观看 | 成人网页在线免费观看 | 91综合在线| 最新亚洲视频 | 波多野结衣理论片 | 色婷丁香 | 久热av在线 | 又黄又刺激的视频 | 久久久久久国产精品免费 | 日日弄天天弄美女bbbb | 国产美女免费观看 | 日韩电影在线观看一区二区三区 | 最新精品视频在线 | 久久精品99国产精品 | 91视频啊啊啊 | 国产精品午夜在线观看 | 国产伦精品一区二区三区高清 | 亚洲一区免费在线 | 中文字幕久久亚洲 | 久久成人精品电影 | 香蕉久久国产 | 午夜狠狠干 | 免费中午字幕无吗 | 亚洲资源网 | 狠狠色丁香婷婷综合久小说久 | 在线国产专区 | 四虎影视欧美 | av黄色在线观看 | 亚洲一级电影 | 国产一二三四在线视频 | 黄色大全免费观看 | 高清在线观看av | 久久久久女人精品毛片 | 97在线免费| 国产精品2019| 亚洲专区中文字幕 | 欧美国产日韩激情 | 日韩一区二区三免费高清在线观看 | 国产精品久久久亚洲 | 天天综合导航 | 国产精品6 | 国产一区二区在线观看免费 | 激情久久伊人 | 国产精品theporn| 国产又粗又猛又爽又黄的视频免费 | 奇米网网址 | 欧美一区二区三区激情视频 | 午夜视频在线观看网站 | 国产麻豆成人传媒免费观看 | a视频在线观看免费 | 在线免费观看的av网站 | 激情五月亚洲 | 亚洲精品在线国产 | 欧美日韩国产精品一区二区三区 | 黄色a一级片 | 成人香蕉视频 | 国产精品一区二区av | 亚洲色图色 | 国内精品久久久久影院优 | 亚洲视频 视频在线 | 亚洲精选视频免费看 | 色www精品视频在线观看 | 欧美日韩在线观看一区二区三区 | 国产a级免费 | 亚洲在线视频播放 | 国产日韩精品在线观看 | 久艹视频在线免费观看 | 在线播放av网址 | 狠狠色狠狠色合久久伊人 | 91福利社在线观看 | 成人理论在线观看 | 婷婷综合久久 | 国产自在线观看 | 国产日韩欧美在线观看视频 | 久久精品久久久久电影 | av黄色在线| 美女视频黄频 | 国产 一区二区三区 在线 | 伊人色**天天综合婷婷 | 一区二区三区四区五区在线视频 | 91av在线免费看 | 亚州精品天堂中文字幕 | 久久久网址 | 欧美天天综合网 | 欧美日本在线观看视频 | 日韩美精品视频 | 国产小视频在线看 | 色婷婷中文 | 国产视频中文字幕 | 欧美日韩免费看 | av免费看看 | 国产人成在线视频 | 免费观看黄色av | 成人一级 | 香蕉久久久久久av成人 | 成人综合日日夜夜 | 久久综合福利 | 91成人免费观看视频 | 免费观看www小视频的软件 | 午夜精品久久久久久久久久 | 婷婷在线视频 | 中文字幕在线视频免费播放 | 久久永久免费视频 | 美女免费视频一区 | 国产色婷婷 | 国产精品第一页在线 | 色五月色开心色婷婷色丁香 | 国产精品a成v人在线播放 | 国产日韩中文在线 | 天天操狠狠操 | 五月综合激情 | 久久成人欧美 | 久久久久亚洲精品成人网小说 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产 亚洲 欧美 在线 | 激情久久综合 | 国产精品1区2区3区 久久免费视频7 | 久久精品国产久精国产 | 欧美最猛性xxxxx(亚洲精品) | 夜色资源站国产www在线视频 | 免费看的黄网站 | 9999在线观看 | 欧美国产不卡 | 99av国产精品欲麻豆 | 精品久久91 | 黄色三级在线看 | 麻豆va一区二区三区久久浪 | 国产一区视频导航 | 日韩电影中文 | 久久久久久在线观看 | 欧美少妇xxx | 在线观看亚洲a | 免费看成人片 | 亚洲一级影院 | 中文在线a在线 | 日韩av免费在线电影 | 天堂va在线观看 | 成人午夜精品 | 99精品国产aⅴ | 四虎成人精品永久免费av九九 | 91av99| 国产精品国产三级国产aⅴ9色 | 国产高清免费 | 国产精品久久久久久久电影 | 亚洲好视频 | 天天操天天操天天操天天操 | 91精品久久久久久久久久入口 | 日本精品一区二区 | 国产成人一二三 | 伊人狠狠操 | 一本一本久久a久久精品综合小说 | 狠狠干在线播放 | 91精品视频免费在线观看 | 男女激情免费网站 | 久久九九影视 | 亚洲国产剧情 | 亚洲精品动漫在线 | 国产视频69 | 精品视频在线观看 | 欧美日韩在线视频观看 | 日韩精品aaa| 人人射人人射 | 亚洲精品白浆高清久久久久久 | 美女网站色在线观看 | 毛片永久新网址首页 | 狠狠88综合久久久久综合网 | 免费观看一级一片 | 中文字幕av免费观看 | 成人久久久久久久久 | 中文字幕 欧美性 | 亚洲黄色小说网 | 伊人国产在线播放 | 久草久草在线 | 亚洲国产免费看 | 中文字幕丰满人伦在线 | 久久夜夜爽 | 久久久久久久久久久久av | 亚洲在线视频播放 | 国产精品视频资源 | 精品不卡视频 | 久久人人添人人爽添人人88v | 国产精品久久久精品 | 一区二区三区福利 | 亚洲免费在线观看视频 | 国产欧美日韩精品一区二区免费 | 在线天堂日本 | 99久久久久成人国产免费 | 色综合 久久精品 | 亚洲a在线观看 | 欧美一级爽 | 欧美精品免费视频 | 国产资源网 | 久久久午夜电影 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国内精品久久久久久中文字幕 | 国产热re99久久6国产精品 | 丁香久久五月 | 日韩av中文在线观看 | 日韩久久片 | 国产成人久久精品一区二区三区 | 92av视频| 成人av网址大全 | 国产91在| 国产精品无av码在线观看 | 中文字幕在线免费 | 久久天天躁夜夜躁狠狠85麻豆 | 西西4444www大胆视频 | 国产精品男女啪啪 | 99精品视频一区二区 | 久久久免费观看 | 91精品久久久久久综合乱菊 | 青青草视频精品 | 国产一区二区在线免费视频 | 免费中午字幕无吗 | 久久久久国产精品免费免费搜索 | 91视频88av | av在线看网站 | 亚洲日本va在线观看 | 免费在线视频一区二区 | 97色婷婷 | 黄污视频网站大全 | 97国产精品免费 | 国产亚洲精品久久久久动 | 91精品专区 | 欧洲亚洲国产视频 | 丁香婷婷在线观看 | 亚洲激情av| 中文字幕 国产视频 | 国产欧美综合视频 | 久久久免费观看完整版 | 美女精品国产 | 日韩毛片在线免费观看 | www免费视频com━ | 成在线播放 | 天天操一操 | 久久久国产电影 | 国内久久看| 能在线观看的日韩av | 亚洲视频456| 伊人午夜 | 亚洲精品网址在线观看 | 国产精品美女久久久 | 97在线观 | 国产精品99久久久久久小说 | 992tv人人网tv亚洲精品 | 久草视频在线资源 | 91九色视频 | 天天添夜夜操 | 久久久这里有精品 | 国产成年免费视频 | 日韩精品免费一区二区 | 日韩精品视频在线观看网址 | 天天综合网 天天 | 综合久久一本 | 久草av在线播放 | 国产欧美日韩视频 | 超碰成人免费电影 | 男女精品久久 | 色偷偷人人澡久久超碰69 | 四虎影视欧美 | 亚洲 欧美 综合 在线 精品 | 91男人影院 | 国产精品丝袜久久久久久久不卡 | 日韩av一区二区三区四区 | 日韩高清无线码2023 | 91av视屏| 99久久久久国产精品免费 | 亚洲欧美日韩在线看 | 激情五月婷婷激情 | 三级免费黄色 | 911香蕉| 久久亚洲私人国产精品va | 亚州精品一二三区 | 日韩高清一区二区 | 国产精品中文在线 | 亚洲一区精品人人爽人人躁 | 免费看网站在线 | 久精品视频在线观看 | 99久久精品免费看 | 丁香导航| 狠狠狠狠干 | av一区在线播放 | 日韩久久精品一区 | 麻豆视频入口 | 中文字幕一区二区三区在线观看 | 日韩欧美在线观看一区二区三区 | 波多野结衣亚洲一区二区 | 亚洲欧洲国产日韩精品 | 欧美日韩高清在线 | 国产精品美女久久久久久免费 | 色悠悠久久综合 | h网站免费在线观看 | 亚洲黄色在线观看 | 黄色中文字幕在线 | 波多野结衣在线视频一区 | 日日日日干| 欧美精品一区在线 | 日本公妇在线观看 | 欧美成年黄网站色视频 | 色资源在线 | 久草视频在线新免费 | 亚洲专区欧美 | 久久精品福利 | 看黄色91 | 天天操偷偷干 | 91丨九色丨蝌蚪丰满 | 日韩精品一区二区三区免费观看视频 | 亚洲一区二区三区91 | 九九久久久久久久久激情 | 国产亚洲精品久久久久久网站 | 色干干 | 亚洲一区二区三区miaa149 | 国产精品精品 | 婷婷网站天天婷婷网站 | 精品国内自产拍在线观看视频 | 天天操操操操操 | 国产亚洲精品久久久久秋 | 黄色片亚洲 | 日韩免费成人av | 人人干人人艹 | 99热这里只有精品在线观看 | 国产午夜免费视频 | 91插插插免费视频 | 一级性视频 | 亚洲黄色片 | 日韩一区正在播放 | 9热精品| 午夜视频免费 | 黄色毛片视频免费观看中文 | 精品一区电影 | 国内精品国产三级国产aⅴ久 | 欧美一区二视频在线免费观看 | 国产青春久久久国产毛片 | 国产精品第一 | 久久狠狠婷婷 | 五月婷婷电影网 | www在线观看视频 | 国内成人精品2018免费看 | www.av在线.com| 日韩羞羞 | 亚洲最新av | 国产成人一区二区三区在线观看 | 又黄又网站| 欧美 亚洲 另类 激情 另类 | 四虎影视国产精品免费久久 | 国产乱老熟视频网88av | 91香蕉视频污在线 | 香蕉视频网站在线观看 | 麻豆一二三精选视频 | 成人性生交视频 | 国产91综合一区在线观看 | 狠狠色丁香婷婷综合久小说久 | 国产精品高 | av最新资源| 天天射天天射天天射 | 免费成人在线观看 | 性色va| 热久久免费国产视频 | av在线收看| 悠悠av资源片 | 久久国语露脸国产精品电影 | 特级西西444www大胆高清无视频 | 日韩欧美有码在线 | 99精品影视| av资源在线观看 | 亚洲综合涩 | 免费在线观看91 | 国产在线高清视频 | a黄色片 | 在线91av| 久草在线资源观看 | 国产麻豆视频网站 | 国产高清精| 免费av免费观看 | 久久免费视频在线观看 | 久久一区国产 | 亚洲伊人网在线观看 | 在线观看免费成人av | 成人欧美一区二区三区在线观看 | 丁香花在线视频观看免费 | 免费a网 | 天天操天天舔天天干 | av高清影院 | 久久精品观看 | 狠狠色噜噜狠狠狠狠2022 | 国产精品第52页 | 97超碰资源站| 亚洲国产成人在线观看 | 亚洲精品黄 | 亚洲综合欧美日韩狠狠色 | 亚洲综合视频网 | 日批网站免费观看 | 91九色视频在线播放 | 久久精品欧美一区 | 首页国产精品 | 91麻豆福利| 国内少妇自拍视频一区 | 五月丁香| 五月天天在线 | 日韩高清成人 | 久久精品黄 | 中文字幕亚洲情99在线 | 欧美另类xxx | 夜夜操天天摸 | 天天操天天色综合 | 国产一级精品绿帽视频 | 中午字幕在线 | 久久理伦片 | 九九精品久久久 | 色婷婷av一区 | 91看片淫黄大片一级在线观看 | 亚洲精品一区二区久 | 国产精品自产拍在线观看网站 | 欧美永久视频 | 中文字幕亚洲精品日韩 | 婷婷成人综合 | 天天干天天看 | 精品一区二区电影 | 国产精品一区二区三区四 | 在线天堂中文在线资源网 | 久久99精品波多结衣一区 | 在线观看视频一区二区三区 | 西西www4444大胆视频 | 99精品视频观看 | 91精品国产91久久久久 | 中文字幕在线播出 | 成人在线视频免费观看 | 午夜精品久久久久久久爽 | 国产精品av免费观看 | 免费男女网站 | 天堂入口网站 | 亚洲视频久久久久 | 欧美一区二区三区免费看 | 超碰免费在线公开 | 久久五月天婷婷 | av一级在线 | 午夜av免费| 黄色网址国产 | 久草五月 | 国产午夜精品在线 | 精品国产欧美一区二区三区不卡 | 91网页版在线观看 | 亚洲精品久久久蜜桃 | 玖玖精品在线 | 久久精品人人做人人综合老师 | 午夜精品视频在线 | 久久久久久久看片 | 999成人免费视频 | 91麻豆精品91久久久久同性 | 婷婷久久婷婷 | 亚洲成人国产 | 一区 二区电影免费在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 在线观看www91| 91在线国产观看 | 天天色播| 青青河边草手机免费 | 国产视频资源在线观看 | 精品毛片久久久久久 | 激情综合网五月婷婷 | 色综合天天狠天天透天天伊人 | 六月色丁香 | 久久 地址| 亚州精品在线视频 | 黄网站www| 国产成人一区二区三区影院在线 | 综合网天天射 | 亚洲视频免费视频 | 婷婷亚洲五月色综合 | 色五婷婷| 伊人色综合久久天天网 | 亚洲精选视频在线 | 成年人在线免费视频观看 | 欧美巨大荫蒂茸毛毛人妖 | 国产精品久久久一区二区 | 中文字幕在线观看的网站 | 天天干天天干天天射 | 日本不卡一区二区三区在线观看 | 国产99久久精品 | 五月婷婷电影网 | 97视频久久久 | 在线观看中文字幕2021 | 免费观看完整版无人区 | 69xx视频 | 99久久www免费| 久久国产色 | av解说在线观看 | 国产精品免费一区二区三区在线观看 | 最近免费在线观看 | 免费看的黄色的网站 | 久久亚洲国产精品 | 91精品一 | 91精品免费 | 亚洲午夜久久久久久久久久久 | 国产成人综合在线观看 | 色婷婷综合在线 | 亚洲a资源| 免费看一级片 | av成人免费网站 | 国产精品一区二区久久 | 免费在线视频一区二区 | 在线免费观看视频一区 | 婷婷视频在线 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品午夜8888 | 99视频国产精品 | 丁香婷婷综合激情五月色 | 在线91播放 | 五月黄色 | 最新的av网站| 免费av免费观看 | 一区二区三区免费播放 | 欧美国产精品一区二区 | 很黄很黄的网站免费的 | 日韩中文久久 | 国产老妇av | 天天射,天天干 | 久久久久久国产精品免费 | 狠狠色狠狠色综合系列 | 免费在线观看av网站 | 免费av网站观看 | 精品久久1| 国产香蕉97碰碰碰视频在线观看 | 中文字幕久久精品 | 激情丁香月 | 精品一区av| 九九久久视频 | 国产我不卡 | 久久久精品久久日韩一区综合 | 日本少妇久久久 | 国产精品久久久免费 | 国内精自线一二区永久 | 日韩免费av在线 | 天天爽人人爽 | av九九九 | 日韩美女一级片 | 五月开心六月伊人色婷婷 | 成人网页在线免费观看 | 国产欧美久久久精品影院 | 国产久草在线 | 久久三级毛片 | 在线国产99 | 国产黄色精品视频 | 99久久精品国产亚洲 | 国产精品毛片一区二区 | 亚洲精品国产精品国自产观看 | 国内综合精品午夜久久资源 | 久久不射电影网 | 91pony九色丨交换 | 999视频网 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 成人三级av| 久久er99热精品一区二区 | 性色av免费在线观看 | 精品女同一区二区三区在线观看 | 欧美精品网站 | 亚洲国产字幕 | www最近高清中文国语在线观看 | 日韩视频在线不卡 | 日韩欧美国产成人 | 91精品国自产拍天天拍 | 香蕉精品视频在线观看 | 欧美激精品 | 天天操天天射天天舔 | 国产精品网在线观看 | 99久久久国产精品免费99 | av免费网站观看 | 成人网在线免费视频 | 久久综合欧美精品亚洲一区 | 国产a国产 | 成人在线观看免费 | 二区三区在线观看 | 九九在线精品视频 | 久久er99热精品一区二区三区 | 国产99久| 狠狠干狠狠色 | 99久久精品国产系列 | 国产精品综合久久 | 免费观看国产视频 | 日日干夜夜草 | 亚洲男男gaygay无套 | 日韩一级电影网站 | 中文字幕丰满人伦在线 | 美女黄频在线观看 | 国产精品伦一区二区三区视频 | 91福利社在线观看 | 96香蕉视频 | 精品一区二区免费视频 | 天堂av最新网址 | 久久久久久久久久久高潮一区二区 | 国产精品久久久久9999吃药 | 天天爱天天操 | 视频一区二区精品 | 久久国产精品第一页 | 成人网页在线免费观看 | 草久视频在线 | 久久久www| 国产乱码精品一区二区蜜臀 | 久久欧美视频 | 天天操夜夜爱 | 九色视频网站 | 久久国产一区二区三区 | 国产精品扒开做爽爽的视频 | 黄色毛片视频免费观看中文 | 婷婷激情影院 | 日韩v在线91成人自拍 | 欧美亚洲三级 | 在线看岛国av | 成人黄色一级视频 | 最近日本中文字幕 | 一区二区三区在线观看中文字幕 | 免费av看片 | 香蕉久久久久久av成人 | 91网址在线看 | 九九爱免费视频在线观看 | 久草视频99 | 国产网红在线观看 | 中文字幕在线观看第一区 | 99久久久国产精品免费99 | 人人狠 | av在线等| 激情综合网五月婷婷 | 九月婷婷综合网 | 亚洲国产中文字幕在线观看 | 国产成人精品午夜在线播放 | 在线中文字幕观看 | 日韩欧美高清一区二区三区 | www黄免费| 日韩在线观看视频中文字幕 | 国产原创在线视频 | 免费视频黄色 | 国产精品久久久久久久久久三级 | 亚洲国产伊人 | 最新日韩在线观看视频 | 精品一区二区电影 | 天天天在线综合网 | 国产一区二区三区免费视频 | 国产精品手机在线 | 黄色aa久久 | 久产久精国产品 | 国产99久久99热这里精品5 | 亚洲一区av | 中文字幕av最新 | 久久国产精品影视 | 国产精品高清免费在线观看 | 欧美日韩伦理在线 | 日韩精品一区在线观看 | 欧美日韩国产精品爽爽 | 国产高清专区 | 人人讲下载 | 免费高清影视 | 亚洲午夜电影网 | 亚洲成人黄色在线 | 久久精品这里热有精品 | 在线播放国产一区二区三区 | 久久综合狠狠综合 | 国产成人99av超碰超爽 | 五月情婷婷 | 色橹橹欧美在线观看视频高清 | 黄色特级一级片 | 国产精品永久在线观看 | 国产精品亚洲人在线观看 | 久久激五月天综合精品 | 黄色软件视频网站 | 国产成人免费 | 麻豆视频在线观看免费 | 亚洲 欧美 另类人妖 | 日韩激情在线 | 久草久草在线 | 久久亚洲私人国产精品va | 亚洲午夜激情网 | 中文在线字幕免 | 精品伊人久久久 | 国产一级视频在线观看 | 九九综合在线 | 99视| 国产99久久久精品 | 日本视频不卡 | 国精产品一二三线999 | 成人午夜片av在线看 | 97超碰伊人 | 午夜视频色 | 久久草草热国产精品直播 | 在线视频电影 | 在线看av网址 | 国内精品久久久久影院一蜜桃 | 日日夜精品| 91视频-88av | 免费中文字幕在线观看 | 久久一级电影 | 久久久久久久久黄色 | 国产精品久久久久久久久久99 | 九色自拍视频 | 久久久精品 一区二区三区 国产99视频在线观看 | 国产香蕉97碰碰久久人人 | 96精品在线 | 草草草影院 | 免费视频91| 97香蕉超级碰碰久久免费软件 | 久久久久草 | 男女全黄一级一级高潮免费看 | 免费色av | 中文字幕一区二 | 精品一区av| 日日干,天天干 | 97av精品| 日日草av | 日韩电影中文字幕 | 在线免费看黄色 | 欧美日一级片 | 日韩精品不卡在线 | 九九热免费在线视频 | 四虎影视久久久 | 成人黄色小说视频 | 日韩高清精品一区二区 | 中文字幕一区二区三区乱码在线 | 最新动作电影 | 国产一级h | 国产成人三级在线观看 | 黄色av电影一级片 | 网站免费黄 | 97超碰在线播放 | www.黄色片.com | 婷婷激情五月综合 | 国产精品久久久久四虎 | 色成人亚洲 | 国产精品久久久久婷婷二区次 | 精品国产久 | 精品久久网站 | 色综合综合 | 久久99国产一区二区三区 | 免费一区在线 | 久免费 | 久久精品99国产精品日本 | 99操视频| 国产精品系列在线播放 | 69国产精品视频免费观看 | 国产91探花 | 久久精品中文 | 亚洲精品国内 | 手机在线黄色网址 | 综合影视 | 国产免费不卡 | 久久国产精品小视频 | 亚洲伦理一区 | 精品一区二区在线免费观看 | 亚洲精品国产综合久久 | 999热线在线观看 | 91av蜜桃| 中文字幕在线观看国产 | 在线播放精品一区二区三区 | 天天鲁一鲁摸一摸爽一爽 | 一区精品久久 | 国产最新视频在线观看 | 97视频亚洲 | av电影中文字幕 | 亚洲爱视频| 97在线影院 | 美女在线免费视频 | 欧美精品久久久久久久久久白贞 | 精品一区二区三区在线播放 | 久久成人综合视频 | 婷婷性综合 | 麻豆视频免费入口 | 久久夜色精品国产欧美一区麻豆 | 亚洲精品在线免费播放 | 国产中文字幕视频 | 欧美a视频在线观看 | 久久国产电影院 | 欧美午夜寂寞影院 | 狠狠色噜噜狠狠狠合久 | 久久五月天色综合 | 国产精品色婷婷视频 |