国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動態(tài)規(guī)劃—— 最長上升子序列模型 解題記錄

這篇具有很好參考價值的文章主要介紹了動態(tài)規(guī)劃—— 最長上升子序列模型 解題記錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一些想法:

??????? 現(xiàn)在是2024-3-15 06:01:22 哈哈卷死我可愛的舍友們~ 這兩天又想起來開學(xué)的時候立下的刷完kuangbin專題的flag(快進到干不完) 總是先把Acwing的提高課看完吧 每天這樣干一點總能干完的hhhhh,這會在喝npy買的奶茶,超多椰果真的好喝愛了愛了。

解題報告:

??????? 今天是最長上升子序列模型,模型本身難度不高,利用yxc的解題方法就可以分解為以下條件:

1. 集合表示方法: f[i] 表示從這一序列的第一項到第 i 項為止的所有可能的方案。

2. 集合表示屬性: 長度的最大值 總和的最大值

最核心的代碼如下:(按照題目條件稍加修改可以過掉下面兩道題)

?

for(int i = 1; i<=n ;i++)
{
    f[i]= 1;//賦初值 保證至少長度為1 即本身
    for(int j =1 ;j<i ;j++)
    {
        if(a[i] > a[j]) f[i] = max(f[i], f[j]+1);
    }
}

AcWing 1017. 怪盜基德的滑翔翼

AcWing 1014. 登山

??????? 然后是幾道需要將原題目轉(zhuǎn)化為最長上升子序列模型的題目。

????????合唱隊形求一個帶峰值的最長隊伍,我們可以通過將每個人視為以他為左上升的子序列的右端點的同時視作右上升的子序列的左端點來找到最大的一個目標隊形,記得減去被重復(fù)計算的這個人本身。

??????? 友好城市求最多可以批準的城市數(shù)量,思考形成最長上升子序列的過程,只有在當(dāng)前考慮的一層循環(huán)的值的左邊的值,即序號比它小的值才可以被考慮是否可以用來更新最大值。友好城市就是如此,我們將河岸一邊的城市進行正序排序,只有當(dāng)另一邊的建橋方案無沖突即也是正序時才是合法方案,那么可以使用pair來保證只使用兩個序號都比這一組小的值來更新最大方案。

??????? 最大上升子序列和比較簡單,是對模型的變形,從求最長的子序列變成最大的子序列。

AcWing 482. 合唱隊形

AcWing 1012. 友好城市

AcWing 1016. 最大上升子序列和

??????? 隨后是兩道劇情連續(xù)的題目。(痛苦降臨)

??????? 攔截導(dǎo)彈。第一問就是最長上升子序列。第二問用貪心思路,從前往后掃描每個數(shù),對每個數(shù)做判斷,如果不存在比它小的數(shù) (一個新的最大值) 那么就新開一個子序列 (新的系統(tǒng)),如果存在,則找到一個結(jié)尾比它大的數(shù)列,放在這個數(shù)的后面 (可以通過二分優(yōu)化) 。最后第一問輸出最長的序列的長度,第二問輸出創(chuàng)建的系統(tǒng)總數(shù)即可。

??????? 導(dǎo)彈防御系統(tǒng)。迭代加深,利用一個dfs參數(shù)depth來記錄上升系統(tǒng)與下降系統(tǒng)的和。從depth=1開始,不斷depth++直到得到一個合法的能包容上升與下降系統(tǒng)的和的解。

????????dfs過程中,暴力搜索將每個元素放到上升那一坨還是下降那一坨系統(tǒng)中

????????當(dāng)滿足第一個比新加入的元素的(上升或下降系統(tǒng)的)條件就把這個元素加進去,與上一題的貪心解法是相同的

????????如果沒找到這樣一個放入的方法的解,那么就拓寬隊列的長度,直到放入上升和下降都不行的話,那么返回false

??????? 看代碼會好理解一點,懶得寫了(bushi)

AcWing 1010. 攔截導(dǎo)彈

AcWing 187. 導(dǎo)彈防御系統(tǒng)

??????? 最后是一道組合題,求最長公共上升子序列。

??????? 本題使用公共子序列的狀態(tài)表示, f[i][j] 表示 a 的前 i 個元素中和 b 的前 j 個元素中,以b[j] 為結(jié)尾的方案,存的是方案中的上升子序列的長度的最大值。

??????? 將方案話劃分為:

??????? 1. 不選 a[i] 的子集 直接符合定義 f[i-1][j]

??????? 2. 選了 a[i] 的子集 前提是a[i] ==? b[j]

??????????????? 然后確定最大值的轉(zhuǎn)移,當(dāng) b[k] < b[j] (滿足上升條件)時 才能用來更新最大值,然后我們 要求這些前 1~j-1 中的最大值。

??????? 時間復(fù)雜度上 狀態(tài)表示為 狀態(tài)計算為 n 所以總的時間復(fù)雜度是

????????注意到我們在狀態(tài)計算的時候,求的來的 b[1~j] 的最大值是前綴最大值,在往后計算時會重復(fù)計算,也即最大值會在計算 b[1] 開始向后傳遞,同時 只有當(dāng)這個數(shù)已經(jīng)小于我們現(xiàn)在正在看的 a[i] 時才能加入計算前綴最大值的行列中,所以我們開一個值 maxv ,當(dāng) a[i]>b[j] 時就記錄這樣的前綴最大值即可。

優(yōu)化前:

for (int i = 1; i <= n; i ++ )
    for (int j = 1; j <= n; j ++ )
    {
        f[i][j] = f[i - 1][j];
        if (a[i] == b[j])
        {

            int maxv = 1;
            for (int k = 1; k < j; k ++ )
                if (b[j] > b[k])
                    maxv = max(maxv, f[i - 1][k] + 1);

            f[i][j] = max(f[i][j], maxv);
        }
    }

優(yōu)化后:

    for (int i = 1; i <= n; i ++ )
    {
        int maxv = 1;
        for (int j = 1; j <= n; j ++ )
        {
            f[i][j] = f[i - 1][j];
            if (a[i] == b[j]) f[i][j] = max(f[i][j], maxv);
            if (a[i] > b[j]) maxv = max(maxv, f[i - 1][j] + 1);
        }
    }
心得:

??????? 兩道導(dǎo)彈題目當(dāng)初學(xué)的時候真是要了老命,寫這篇博客的時候還琢磨了一個鐘,還是太菜(幸好最后搞懂了)。首次遇到了迭代加深的題,多看多學(xué)。

????????文章來源地址http://www.zghlxwxcb.cn/news/detail-849647.html

到了這里,關(guān)于動態(tài)規(guī)劃—— 最長上升子序列模型 解題記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 動態(tài)規(guī)劃__最長上升子序列

    動態(tài)規(guī)劃__最長上升子序列

    目錄 一.最長上升子序列 最長上升子序列模板 O(n ^ 2) 最長上升子序列二分優(yōu)化 O(nlongn) 1017. 怪盜基德的滑翔翼 1014. 登山 1012. 友好城市 1016. 最大上升子序列和 1010. 攔截導(dǎo)彈 187. 導(dǎo)彈防御系統(tǒng) 二.最長公共上升子序列 最長公共子序列 最長公共上升子序列 給定一個長度為 N 的數(shù)

    2024年02月04日
    瀏覽(25)
  • C++動態(tài)規(guī)劃之最長上升子序列

    C++動態(tài)規(guī)劃之最長上升子序列

    一個序列A={a1,a2,...an}中任意刪除若干項,剩余的序列叫做A的一個子序列。例如序列A={1,3,5,4,2},刪除其中的第3項和第5項,得到序列B={1,3,4},刪除其中的第3項和第4項,得到序列C={1,3,2},此時序列B和C是序列A的子序列。 如果序列中的元素是從小到大排列的,則該序列為上升

    2023年04月14日
    瀏覽(25)
  • C++---最長上升子序列模型---最大上升子序列和(每日一道算法2023.3.3)

    C++---最長上升子序列模型---最大上升子序列和(每日一道算法2023.3.3)

    注意事項: 本題為\\\"線性dp—最長上升子序列的長度\\\"的擴展題,所以dp思路這里就不再贅述。 題目: 比如,對于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等。 這些子序列中和最大為18,為子序列(1,3,5,9)的和。 你的任務(wù),就是對于給定的序列,求出最大上升子序

    2024年02月03日
    瀏覽(31)
  • 最長上升子序列模型(LIS)

    最長上升子序列模型(LIS)

    最長上升子序列模型就像它的名字一樣,用來從區(qū)間中找出最長上升的子序列。它主要用來處理區(qū)間中的挑選問題,可以處理上升序列也可以處理下降序列,原序列本身的順序并不重要。 895. 最長上升子序列(活動 - AcWing) 896. 最長上升子序列 II(活動 - AcWing) 我們就這兩個

    2024年01月19日
    瀏覽(20)
  • 算法:動態(tài)規(guī)劃——最長公共子序列

    算法:動態(tài)規(guī)劃——最長公共子序列

    動態(tài)規(guī)劃算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然后從這些子問題的解得到原問題的解。 與分治法不同的是,適合于用動態(tài)規(guī)劃法求解的問題,經(jīng)分解得到的子問題往往不是互相獨立的。若用分治法解這類問題,則分解得到的

    2023年04月27日
    瀏覽(22)
  • 【算法-動態(tài)規(guī)劃】最長公共子序列

    【算法-動態(tài)規(guī)劃】最長公共子序列

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年01月23日
    瀏覽(27)
  • 動態(tài)規(guī)劃算法 | 最長遞增子序列

    動態(tài)規(guī)劃算法 | 最長遞增子序列

    通過查閱相關(guān)資料 發(fā)現(xiàn)動態(tài)規(guī)劃問題一般就是求解最值問題 。這種方法在解決一些問題時應(yīng)用比較多,比如求最長遞增子序列等。 有部分人認為動態(tài)規(guī)劃的核心就是:窮舉。因為要求最值,肯定要把所有可行的答案窮舉出來,然后在其中找最值。 首先,筆者認為動態(tài)規(guī)劃中

    2024年02月06日
    瀏覽(31)
  • 兩個數(shù)組的動態(tài)規(guī)劃——最長公共子序列模型

    兩個數(shù)組的動態(tài)規(guī)劃——最長公共子序列模型

    1.考慮空串,即dp表多出一行一列, 代表某個字符串為空。 2.考慮最后一個位置;是否相等; 3.可在字符串最前面加虛擬位置以對應(yīng)映射關(guān)系; 4.一般橫行是j,列是i。此時第一行代表第二個字符串不為空,即第一個字符串是空的 給你兩個字符串? s ? 和? t ?,統(tǒng)計并返回在

    2024年03月10日
    瀏覽(19)
  • 【動態(tài)規(guī)劃】最長公共子序列——算法設(shè)計與分析

    【動態(tài)規(guī)劃】最長公共子序列——算法設(shè)計與分析

    子序列是給定序列中在任意位置去掉任意多個字符后得到的結(jié)果。例如: 給定序列 X X X : X : A B C B D A B X:ABCBDAB X : A BCB D A B X X X 的子序列: X 1 : A B C B D A B X_1:ABCBDAB X 1 ? : A BCB D A B X 2 : A B C B X_2:ABCB X 2 ? : A BCB X 3 : A C B B X_3:ACBB X 3 ? : A CBB 給定兩個序列

    2024年02月05日
    瀏覽(27)
  • (Java) 算法——動態(tài)規(guī)劃 最長公共子序列 圖解

    (Java) 算法——動態(tài)規(guī)劃 最長公共子序列 圖解

    遇到了用動態(tài)規(guī)劃來求解最長公共子序列問題,算法這塊兒比較薄弱,便想著在網(wǎng)上找現(xiàn)成的思路和代碼,也算拾人牙慧,但有一點沒想到,都已經(jīng)22年了,關(guān)于LCS問題網(wǎng)上給出的答案如此一言難盡……,只有零散幾篇對于 新手 來說比較友好,但也僅僅這樣,好在自己花了點

    2023年04月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包