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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ 2533 Longest Ordered Subsequence 动态规划

發(fā)布時(shí)間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 2533 Longest Ordered Subsequence 动态规划 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意

本題求從1 到 n的最長上升子序列的長度

分析

最優(yōu)化問題
考慮dp
我們求1-n最長上升子序列長度
假設(shè)記錄在dp[n]中
假設(shè)我們已經(jīng)知道了1—n-1的以第n-1為最后一個(gè)元素的最長上升序列的長度
那么我們拿到第n個(gè)元素不就可以判斷如果這個(gè)n比n-1位置上的元素大
那么就讓dp[n] = dp[n-1]+1不就可以了嗎
那么dp[n-1]又怎么得到
我們需要得到dp[n-2]
那么dp[n-2]咋知道 我們需要dp[n-3]。。。
所以我們不如從前面開始推
設(shè)置dp數(shù)組 dp[i]表示以第I個(gè)元素為結(jié)尾的從1到n最長上升子序列的長度
也就是我們要從第一個(gè)元素x開始向后掃
如果后面的元素比x大 那么就讓dp[I] = dp[1]+1;
那么這里我們看到需要把dp[i]全部都初始化為1
只有這樣才能得到正確累計(jì)的數(shù)量
可是我們發(fā)現(xiàn) 如果每個(gè)元素都做此相同步驟
我們需要考慮就是如果這個(gè)dp[i]本來就比dp[枚舉元素]+1 大 我們就不能直接賦值了
因?yàn)檫@個(gè)元素可能已經(jīng)被前面的某些元素已經(jīng)搞得比較大了
所以我們得到最終的遞推關(guān)系
dp[j]=max(dp[j],dp[i]+1);

CODE

#include<bits/stdc++.h> using namespace std; int a[1010],dp[1010];int main() {int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);dp[i]=1;}for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){if(a[j]>a[i])dp[j] = max(dp[i]+1,dp[j]);}}int ans=-1;for(int i=1;i<=n;i++){ans = max(dp[i],ans);}printf("%d\n",ans);return 0; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的POJ 2533 Longest Ordered Subsequence 动态规划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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