1. 程式人生 > 其它 >最長上升子序列(DP)

最長上升子序列(DP)

技術標籤:作業動態規劃

第五次實驗 - 副本
程式設計題
2. 最長升序子串(選做,不計分)
【問題描述】輸入一行字串,該字串只由小寫英文字母a-z組成,且其中的字元可以重複,最長不超過10000個字元。
從該字串中按順序挑選出若干字元(不一定相鄰)組成一個新串,稱為“子串”。如果子串中每兩個相鄰的字元或者相等,或者後一個比前一個大,則稱為“升序子串”。程式設計求出輸入字串的最長升序子串的長度。
例如,由輸入字串abdbch可以構成的升序子串有:abd、abch、bbch、abbch等。其中最長的升序子串是abbch,其長度為5。
【輸入形式】從標準輸入讀取一行字串,該串不含空格,以回車符結束。

【輸出形式】向標準輸出列印一個正整數,是字串中最長的升序子串的長度,在行末要輸出一個回車符。
【輸入樣例】abdbch
【輸出樣例】5
【樣例說明】abdbch中最長子串是abbch,長度是5。
【評分標準】結果完全正確得20分,每個測試點4分。

在這裡插入圖片描述
沒錯 我們教的cpp 做的演算法

#include<bits/stdc++.h>
using namespace std;
char a[10001];
int len[10001];
int main(){
	cin.getline(a,10001);
	fill(len,len+10001,1);
	for(int i=1;i<(int)strlen(
a);i++){ for(int j=0;j<i;j++){ if(a[j]<=a[i]){ len[i]=max(len[i],len[j]+1); } } } cout<<*max_element(len,len+strlen(a)); }