色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

有了四步解題法模板,再也不害怕動態規劃!

算法與數據結構 ? 來源:五分鐘學算法 ? 2020-06-03 17:27 ? 次閱讀

概論

上一篇文章 我們分析了矩陣類動態規劃,說到這類動態規劃通常在一個矩陣中進行,我們只需要考慮當前位置的信息即可,分析并定義狀態的時候,也只需要分析當前位置和其相鄰位置的關系,通常這樣做就可以達到拆解問題的目的。

這次再來看一類動態規劃問題,序列類動態規劃問題,這類動態規劃問題較為普遍,分析難度相比之前也略有提升,通常問題的輸入參數會涉及數組或是字符串。

在開始之前,先解釋一下子數組(子串)和子序列的區別,你可以看看下面這個例子:

輸入數組:[1,2,3,4,5,6,7,8,9] 子數組:[2,3,4],[5,6,7],[6,7,8,9],... 子序列:[1,5,9],[2,3,6],[1,8,9],[7,8,9],...

可以看到的是,子數組必須是數組中的一個連續的區間,而子序列并沒有這樣一個要求。

你只需要保證子序列中的元素的順序和原數組中元素的順序一致即可,例如,在原數組中,元素 1 出現在元素 9 之前,那么在子序列中,如果這兩個元素同時出現,那么 1 也必須在 9 之前。

為什么要說這個?

不知道你有沒有發現,這里的子數組的問題和我們前面提到的矩陣類動態規劃的分析思路很類似,只需要考慮當前位置,以及當前位置和相鄰位置的關系。

通過這樣的分析就可以把之前講的內容和今天要介紹的內容關聯起來了,相比矩陣類動態規劃,序列類動態規劃最大的不同在于,對于第 i 個位置的狀態分析,它不僅僅需要考慮當前位置的狀態,還需要考慮前面 i - 1 個位置的狀態,這樣的分析思路其實可以從子序列的性質中得出。

對于這類問題的問題拆解,有時并不是那么好發現問題與子問題之間的聯系,但是通常來說思考的方向其實在于尋找當前狀態和之前所有狀態的關系,我們通過幾個非常經典的動態規劃問題來一起看看。

題目分析

最長上升子序列

LeetCode 第 300 號問題:最長上升子序列。

題目描述

給定一個無序的整數數組,找到其中最長上升子序列的長度。

示例:

輸入:[10,9,2,5,3,7,101,18] 輸出:4 解釋:最長的上升子序列是[2,3,7,101],它的長度是 4。

說明:

可能會有多種最長上升子序列的組合,你只需要輸出對應的長度即可。

算法的時間復雜度應該為 O(n2) 。

進階:你能將算法的時間復雜度降低到 O(n log n) 嗎?

題目解析

給定一個數組,求最長遞增子序列。因為是子序列,這樣對于每個位置的元素其實都存在兩種可能,就是選和不選,如果我們用暴力的解法,枚舉出所有的子序列,然后判斷他們是不是遞增的,選取最大的遞增序列,這樣做的話,時間復雜度是 O(2^n),顯然不高效。

那這里我們就需要思考用動態規劃進行優化,我們按之前的四個步驟來具體分析一下:

問題拆解

我們要求解的問題是 “數組中最長遞增子序列”,一個子序列雖然不是連續的區間,但是它依然有起點和終點,比如:

[10,9,2,5,3,7,101,18] 子序列[2,3,7,18]的起始位置是2,終止位置是18 子序列[5,7,101]的起始位置是5,終止位置是101

如果我們確定終點位置,然后去看前面 i - 1 個位置中,哪一個位置可以和當前位置拼接在一起,這樣就可以把第 i 個問題拆解成思考之前 i - 1 個問題,注意這里我們并不是不考慮起始位置,在遍歷的過程中我們其實已經考慮過了。

狀態定義

問題拆解中我們提到 “第 i 個問題和前 i - 1 個問題有關”,也就是說 “如果我們要求解第 i 個問題的解,那么我們必須考慮前 i - 1 個問題的解”,我們定義dp[i] 表示以位置 i 結尾的子序列的最大長度,也就是說 dp[i] 里面記錄的答案保證了該答案表示的子序列以位置 i 結尾。

遞推方程

對于 i 這個位置,我們需要考慮前 i - 1 個位置,看看哪些位置可以拼在 i 位置之前,如果有多個位置可以拼在 i 之前,那么必須選最長的那個,這樣一分析,遞推方程就有了:

dp[i]=Math.max(dp[j],...,dp[k])+1, 其中inputArray[j]

實現

在實現這里,我們需要考慮狀態數組的初始化,因為對于每個位置,它本身其實就是一個序列,因此所有位置的狀態都可以初始化為 1。

最后提一下,對于這道題來說,這種方法其實不是最優的,但是在這里的話就不展開講了,理解序列類動態規劃的解題思路是關鍵。

參考代碼

//@五分鐘學算法 //www.cxyxiaowu.com publicintlengthOfLIS(int[]nums){ if(nums==null||nums.length==0){ return0; } //dp[i]->thelongestlengthsequencefrom0-i,andmustincludenums[i] int[]dp=newint[nums.length]; Arrays.fill(dp,1); intmax=0; for(inti=0;inums[j]){ dp[i]=Math.max(dp[j]+1,dp[i]); } } max=Math.max(max,dp[i]); } returnmax; }粉刷房子

LeetCode 第 256 號問題:粉刷房子。

注意:本題為 LeetCode 的付費題目,需要開通會員才能解鎖查看與提交代碼。

題目描述

假如有一排房子,共 n 個,每個房子可以被粉刷成紅色、藍色或者綠色這三種顏色中的一種,你需要粉刷所有的房子并且使其相鄰的兩個房子顏色不能相同。

當然,因為市場上不同顏色油漆的價格不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以一個 n x 3 的矩陣來表示的。

例如,costs[0][0]表示第 0 號房子粉刷成紅色的成本花費;costs[1][2]表示第 1 號房子粉刷成綠色的花費,以此類推。請你計算出粉刷完所有房子最少的花費成本。

注意:

所有花費均為正整數。

示例:

輸入:[[17,2,17],[16,16,5],[14,3,19]] 輸出:10 解釋:將0號房子粉刷成藍色,1號房子粉刷成綠色,2號房子粉刷成藍色。 最少花費:2+5+3=10。

題目解析

給 n 個房子刷油漆,有三種顏色的油漆可以刷,必須保證相鄰房子的顏色不能相同,輸入是一個 n x 3 的數組,表示每個房子使用每種油漆所需要花費的價錢,求刷完所有房子的最小價值。

還是按原來的思考方式走一遍:

問題拆解

對于每個房子來說,都可以使用三種油漆當中的一種,如果說不需要保證相鄰的房子的顏色必須不同,那么整個題目會變得非常簡單,每個房子直接用最便宜的油漆刷就好了,但是加上這個限制條件,你會發現刷第 i 個房子的花費其實是和前面 i - 1 個房子的花費以及選擇相關,如果說我們需要知道第 i 個房子使用第 k 種油漆的最小花費,那么你其實可以思考第 i - 1 個房子如果不用該油漆的最小花費,這個最小花費是考慮從 0 到當前位置所有的房子的。

狀態定義

通過之前的問題拆解步驟,狀態可以定義成 dp[i][k],表示如果第 i 個房子選擇第 k 個顏色,那么從 0 到 i 個房子的最小花費

遞推方程

基于之前的狀態定義,以及相鄰的房子不能使用相同的油漆,那么遞推方程可以表示成:

dp[i][k]=Math.min(dp[i-1][l],...,dp[i-1][r])+costs[i][k],l!=k,r!=k

實現

因為我們要考慮 i - 1 的情況,但是第 0 個房子并不存在 i - 1 的情況,因此我們可以把第 0 個房子的最小花費存在狀態數組中,當然你也可以多開一格 dp 狀態,其實都是一樣的。

對于這道題目,你可能會問這不是和矩陣類動態規劃類似嗎?

如果單從房子來考慮的確是,但是對于顏色的話,我們必須考慮考慮相鄰房子的所有顏色,這就有點序列的意思在里面了。

另外對于題目的分類其實沒有嚴格的限定,主要是為了把相類似的問題放在一起,這樣有便于分析問題思路。

參考代碼

//@五分鐘學算法 //www.cxyxiaowu.com publicintminCost(int[][]costs){ if(costs==null||costs.length==0){ return0; } intn=costs.length; int[][]dp=newint[n][3]; for(inti=0;i

LeetCode 第 265 號問題:粉刷房子II。

注意:本題為 LeetCode 的付費題目,需要開通會員才能解鎖查看與提交代碼。

題目描述

假如有一排房子,共 n 個,每個房子可以被粉刷成 k 種顏色中的一種,你需要粉刷所有的房子并且使其相鄰的兩個房子顏色不能相同。

當然,因為市場上不同顏色油漆的價格不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以一個 n x k 的矩陣來表示的。

例如,costs[0][0] 表示第 0 號房子粉刷成 0 號顏色的成本花費;costs[1][2] 表示第 1 號房子粉刷成 2 號顏色的成本花費,以此類推。請你計算出粉刷完所有房子最少的花費成本。

注意:

所有花費均為正整數。

示例:

輸入:[[1,5,3],[2,9,4]] 輸出:5 解釋:將0號房子粉刷成0號顏色,1號房子粉刷成2號顏色。最少花費:1+4=5; 或者將0號房子粉刷成2號顏色,1號房子粉刷成0號顏色。最少花費:3+2=5.

進階:
您能否在 O(nk) 的時間復雜度下解決此問題?

題目解析

上面那道題目的 follow up,現在不是三種油漆,而是 k 種油漆。

其實解題思路還是不變。

對于第 i 個房子的每種顏色,我們對比看第 i - 1 個房子的 k 種油漆,找到不相重的最小值就好,但是這里的時間復雜度是 O(n*k^2)。

其實這是可以優化的,我們只需要在第 i - 1 個位置的狀態中找到最大值和次大值,在選擇第 i 個房子的顏色的時候,我們看當前顏色是不是和最大值的顏色相重,不是的話直接加上最大值,如果相重的話,我們就加上次大值,這樣一來,我們把兩個嵌套的循環,拆開成兩個平行的循環,時間復雜度降至 O(n*k)。

參考代碼(優化前)

//@五分鐘學算法 //www.cxyxiaowu.com publicintminCostII(int[][]costs){ if(costs.length==0||costs[0].length==0){ return0; } intn=costs.length,k=costs[0].length; int[][]dp=newint[n][k]; for(inti=1;i

參考代碼(優化后)

//@五分鐘學算法 //www.cxyxiaowu.com publicintminCostII(int[][]costs){ if(costs.length==0||costs[0].length==0){ return0; } intn=costs.length,k=costs[0].length; int[][]dp=newint[n][k]; for(inti=1;idp[i-1][l]){ min2=min1; min1=dp[i-1][l]; minIndex=l; }elseif(min2>dp[i-1][l]){ min2=dp[i-1][l]; } } for(intj=0;j

LeetCode 第 198 號問題:打家劫舍。

題目描述

你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定一個代表每個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 1:

輸入:[1,2,3,1] 輸出:4 解釋:偷竊 1 號房屋(金額= 1),然后偷竊 3 號房屋(金額= 3)。 偷竊到的最高金額= 1 + 3 = 4 。

示例 2:

輸入:[2,7,9,3,1] 輸出:12 解釋:偷竊 1 號房屋(金額= 2), 偷竊 3 號房屋(金額= 9),接著偷竊 5 號房屋(金額= 1)。 偷竊到的最高金額= 2 + 9 + 1 = 12 。

圖片來源:https://github.com/azl397985856/leetcode

題目解析

還是房子,這次不是刷房子,而是搶房子。。。:)

條件和前面類似,就是相鄰的房子不能搶。老樣子,四個步驟走一遍:

問題拆解

如果我們要求解搶完 n 個房子所獲得的最大收入,因為題目的要求,我們可以思考第 i 個房子是否應該搶,如果要搶,那么第 i - 1 個房子就不能搶,我們只能考慮搶第 i - 2 個房子。如果不搶,那么就可以搶第 i - 1 個房子,這樣一來,第 i 個房子就和第 i - 1 個房子,以及第 i - 2 個房子聯系上了。

狀態定義

通過之前的問題拆解,我們知道,如果我們從左到右去搶房子,搶到當前房子可以獲得的最大值其實是和搶到前兩個房子可以獲得的最大值有關,因此我們可以用dp[i] 表示搶到第 i 個房子可以獲得的最大值

遞推方程

如果我們搶第 i 個房子,那么我們就只能去考慮第 i - 2 個房子,如果不搶,那么我們可以考慮第 i - 1 個房子,于是遞推方程就有了:

dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1])

實現

因為第 i 個位置和前面的兩個位置都有關,這個時候我們可以把狀態多開一格,dp[0] 表示的是一個房子都不搶的狀態,dp[1] 就是最左邊的房子獲得的最大價值,這個房子之前也沒有其他的房子,直接搶即可。

參考代碼

//@五分鐘學算法 //www.cxyxiaowu.com publicintrob(int[]nums){ if(nums==null||nums.length==0){ return0; } intn=nums.length; int[]dp=newint[n+1]; dp[1]=nums[0]; for(inti=2;i<=?n;?++i)?{ ????????dp[i]?=?Math.max(dp[i?-?1],?dp[i?-?2]?+?nums[i?-?1]); ????} ????return?dp[n]; }打家劫舍II?

LeetCode 第 213 號問題:打家劫舍II。

題目描述

你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第一個房屋和最后一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定一個代表每個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例 1:

輸入:[2,3,2] 輸出:3 解釋:你不能先偷竊 1 號房屋(金額= 2),然后偷竊 3 號房屋(金額= 2), 因為他們是相鄰的。

示例 2:

輸入:[1,2,3,1] 輸出:4 解釋:你可以先偷竊 1 號房屋(金額= 1),然后偷竊 3 號房屋(金額= 3)。 偷竊到的最高金額= 1 + 3 = 4 。

題目解析

前面那道題目的 follow up,問的是如果這些房子的排列方式是一個圓圈,其余要求不變,問該如何處理。

房子排列方式是一個圓圈意味著之前的最后一個房子和第一個房子之間產生了聯系,這里有一個小技巧就是我們線性考慮 [0, n - 2] 和 [1, n - 1],然后求二者的最大值。

其實這么做的目的很明顯,把第一個房子和最后一個房子分開來考慮。實現上面我們可以直接使用之前的實現代碼。

這里有一個邊界條件就是,當只有一個房子的時候,我們直接輸出結果即可。

參考代碼

//@五分鐘學算法 //www.cxyxiaowu.com publicintrob(int[]nums){ if(nums==null||nums.length==0){ return0; } if(nums.length==1){ returnnums[0]; } intn=nums.length; returnMath.max( robI(Arrays.copyOfRange(nums,0,n-1)), robI(Arrays.copyOfRange(nums,1,n)) ); } publicintrobI(int[]nums){ if(nums==null||nums.length==0){ return0; } intn=nums.length; int[]dp=newint[n+1]; dp[1]=nums[0]; for(inti=2;i<=?n;?++i)?{ ????????dp[i]?=?Math.max(dp[i?-?1],?dp[i?-?2]?+?nums[i?-?1]); ????} ????return?dp[n]; }

總結

序列類動態規劃的系列問題還有很多,比如股票問題,這類問題通常會給你一個數組或者是字符串,在分析這些問題的時候,需要思考當前狀態的選擇是否要基于前面的狀態,以及他們的關系是什么。

當然這里還有挺多的優化,比如動態規劃的狀態數組的空間優化,這些會在后面統一介紹,這里只需要熟悉動態規劃的思考方向和方法即可。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 矩陣
    +關注

    關注

    0

    文章

    423

    瀏覽量

    34577
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    25974

原文標題:(再進階版)有了四步解題法模板,再也不害怕動態規劃!

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LDC1614EVM在UPLOAD固件過程中意外斷開連接,然后就再也不能正常連接了,怎么處理?

    請教一下LDC1614EVM在UPLOAD固件過程中意外斷開連接,然后就再也不能正常連接了。請問應該如何處理
    發表于 12-27 06:09

    TS5A23157多次開關切換以后IN1, IN2和GND短路怎么解決?

    電路如上圖所示,我是通過按鍵來切換通道的,平時IN1 和IN2都為高電平,然后按下按鍵, IN1 ,IN2短接到地實現通道跳轉,但是在使用中發現有兩個芯片,在多次跳轉以后,IN1 IN2就跟地短路再也不能拉高了,這大概是什么原因造成的呢? 請幫忙看一下
    發表于 12-06 07:56

    如何實現數字孿生?分為以下四步

    實現 數字孿生 是當前科技領域的熱點之一,其應用范圍涵蓋智能制造、智慧城市、物聯網、醫療保健等多個領域。數字孿生技術通過將實體系統的數學模型與虛擬仿真相結合,實現對現實世界中物理實體或過程的模擬和優化管理。下面我將詳細介紹如何實現數字孿生以及相關的關鍵步驟和技術。 首先,實現數字孿生的關鍵在于數據的采集、建模、分析和反饋,具體步驟如下: 1.數據采集: 通過各種傳感器、監控設備、物聯網設備等實時采集有關實體系
    的頭像 發表于 11-29 13:57 ?436次閱讀

    A0到A4的圖框只要一個圖紙模板就搞定

    “ ?圖紙模板規范圖紙的尺寸大小,同時可以在標題欄顯示與圖紙相關的信息,如產品名稱、版本、日期等。從標準化的角度考慮,公司通常會定義A0~A4的圖紙模板,用于不同的設計場合。KiCad提供
    的頭像 發表于 11-13 18:13 ?439次閱讀
    A0到A4的圖框只要一個圖紙<b class='flag-5'>模板</b>就搞定<b class='flag-5'>了</b>?

    半導體發布第代SiC MOSFET技術

    半導體(簡稱ST)近日宣布推出其第代STPOWER碳化硅(SiC)MOSFET技術,標志著公司在高效能半導體領域又邁出了重要一。此次推出的第代技術,在能效、功率密度和穩健性方
    的頭像 發表于 10-10 18:27 ?717次閱讀

    使用helloword的模板,上傳IG502但不能運行,為什么?

    我使用helloword的模板,上傳IG502,但不能運行,請大神幫忙。系統日志如下: sntpc[1226]: ntp request error: 113, No route to host
    發表于 07-24 08:29

    振蕩器動態相位噪聲優化的四步實操指南

    相位噪聲或頻率變化的大小與施加的力或加速度成正比。力越大,頻率不穩定性越大,噪聲越大。由于晶體的加速度敏感性而引起的頻率不穩定性會影響振蕩器性能的許多方面,例如:短期穩定性和相位噪聲性能。相位抖動種振動引起的相位噪聲會影響數字通信系統和RF系統的性能。該錯誤將表現為誤碼率的增加。所有石英晶體都表現出一定程度的固有振動敏感性
    的頭像 發表于 06-28 15:01 ?569次閱讀
    振蕩器<b class='flag-5'>動態</b>相位噪聲優化的<b class='flag-5'>四步</b>實操指南

    四步變一!智慧醫療領域,OpenHarmony如何賦能創新?

    6月22日下午,在華為HDC大會現場,OpenHarmony在行業落地應用成為開發者關注的焦點。“從統一互聯開始,就有一批行業合作伙伴開啟驗證,經過一年的推進,在醫療、政企、教育和金融行業都有
    的頭像 發表于 06-25 00:11 ?4189次閱讀
    <b class='flag-5'>四步</b>變一<b class='flag-5'>步</b>!智慧醫療領域,OpenHarmony如何賦能創新?

    NB05-01啟動后查找信號,持續30s后就再也沒有信號是怎么回事?

    NB05-01 啟動后查找信號,持續30s后就再也沒有信號
    發表于 06-04 06:50

    請問workbench生成代碼時怎么選擇foc或梯形六步法

    workbench生成代碼時怎么選擇foc或梯形六步法
    發表于 04-19 07:53

    PEMS精密原位d33測量儀,是基于動態力和交流諧振的科研設備

    d33并非易事。近年來,基于動態力和交流諧振的測量技術逐漸成為研究的熱點,為壓電材料d33的測量提供新的途徑。 ? 二、基于動態力和交流諧振
    的頭像 發表于 04-09 10:37 ?866次閱讀
    PEMS精密原位d33測量儀,是基于<b class='flag-5'>動態</b>力和交流諧振<b class='flag-5'>法</b>的科研設備

    瑞薩電容觸摸技術之低功耗應用案例—RX140實驗環節(2)-3

    自動調整過程 (Auto Tuning Process) 完成前四步準備工作后,開始第五
    的頭像 發表于 03-12 13:45 ?851次閱讀
    瑞薩電容觸摸技術之低功耗應用案例—RX140實驗環節(2)-3

    淺談英凱溫控閥門在石油化工領域的應用

    它,再也不用擔心溫度過高或過低導致的設備故障和生產效率下降啦!自力式溫控閥,讓您的生產過程變得更加輕松愉快! 接下來,我們要介紹的是三通溫控閥。在石油化工領域,三通溫控閥就像一位“千面女郎”,它可
    發表于 03-11 13:56

    數控線切割加工四步輕松搞定!

    為了減少線切割加工造成的工件變形,應選擇鍛造性能好、滲透性好、熱處理變形小的材料。工件材料應按技術要求進行規范的熱處理。
    的頭像 發表于 02-21 14:01 ?630次閱讀

    再也不用手動關燈,用安信可的小安派做一個智能家居中控

    本作品由安信可社區用戶 noonezero 制作 以下是我的項目之再也不用手動關燈系列,為了方便小伙伴們看效果,大家可以先點擊看視頻。 https://www.bilibili.com/video
    的頭像 發表于 01-08 17:26 ?595次閱讀
    <b class='flag-5'>再也不</b>用手動關燈<b class='flag-5'>了</b>,用安信可的小安派做一個智能家居中控
    主站蜘蛛池模板: 国内视频在线精品一区| 欧美日韩午夜群交多人轮换| 十分钟视频影院免费| 国产ts在线| 小鸟酱喷水| 久久精品国产首叶| 99er热精品视频国产免费| 热中文热国产热综合| 国产精品久久久久影院免费| 亚洲性无码AV久久成人| 免费国产网站| 国产成人免费在线| 亞洲人妻AV無碼在線視頻| 欧美巨大巨粗黑人性AAAAAA| 国产精品久久久久久免费播放| 亚洲视频不卡| 彭丹吃奶门| 精品蜜臀AV在线天堂| xxx在线播放| 亚洲成人免费在线观看| 美女也烦恼主题曲| 国产精品久久人妻无码网站一区无| 欲奴第一季在线观看全集| 日本AAA片爽快视频| 久久99国产综合精品AV蜜桃 | 亚洲毛片网| 免费网站在线观看国产v片| 高清无码中文字幕在线观看视频 | 色戒西瓜视频| 久久精品观看影院2828| 高H内射NP古文| 最近免费中文字幕MV在线视频3| 色窝窝亚洲AV在线观看| 邻家美姨在线观看全集免费| 国产精品亚洲在钱视频| 9久高清在线不卡免费无吗视频| 亚洲精品高清中文字幕完整版| 青青草久久| 里番※琉璃全彩acg奈亚子| 国产午夜精品一区二区三区 | 国产精品无码久久av|