91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++如何解決最長上升子序列和公共子序列問題

發布時間:2022-10-22 11:48:19 來源:億速云 閱讀:188 作者:iii 欄目:編程語言

今天小編給大家分享一下c++如何解決最長上升子序列和公共子序列問題的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

最長上升子序列

描述

一個數的序列bi,當b1 < b2 < ... < bS的時候,我們稱這個序列是上升的。對于給定的一個序列(a1a2, ..., aN),我們可以得到一些上升的子序列(ai1ai2, ..., aiK),這里1 <= i1 < i2 < ... < iK <= N。比如,對于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。這些子序列中最長的長度是4,比如子序列(1, 3, 5, 8).

你的任務,就是對于給定的序列,求出最長上升子序列的長度。

輸入

輸入的第一行是序列的長度N (1 <= N <= 1000)。第二行給出序列中的N個整數,這些整數的取值范圍都在0到10000。

輸出

最長上升子序列的長度。

樣例輸入

7
1 7 3 5 9 4 8

樣例輸出

4

題解如下

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int a[100005];
int ans=0;
int dis[100005];
int main(){
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
  }
  ans=0;
  dis[1]=0;
  for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){//j永遠不會超過i
      if(a[i]>a[j]){
        dis[i]=max(dis[i],dis[j]);//狀態轉移
      }
    }
    ans=max(ans,++dis[i]);
  }
  cout<<ans;
}

c++如何解決最長上升子序列和公共子序列問題

公共子序列

描述

我們稱序列Z = < z1, z2, ..., zk >是序列X = < x1, x2, ..., xm >的子序列當且僅當存在 嚴格上升 的序列< i1, i2, ..., ik >,使得對j = 1, 2, ... ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。

現在給出兩個序列X和Y,你的任務是找到X和Y的最大公共子序列,也就是說要找到一個最長的序列Z,使得Z既是X的子序列也是Y的子序列。

輸入

輸入包括多組測試數據。每組數據包括一行,給出兩個長度不超過200的字符串,表示兩個序列。兩個字符串之間由若干個空格隔開。

輸出

對每組輸入數據,輸出一行,給出兩個序列的最大公共子序列的長度。

樣例輸入

abcfbc         abfcab
programming    contest 
abcd           mnp

樣例輸出

4
2
0

題解如下

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[10005],b[10005];
int ans[505][505];
int main(){
  while(cin>>a+1>>b+1){
    memset(ans,0,sizeof(ans));
    int x=strlen(a+1);
    int y=strlen(b+1);
    for(int i=1;i<=x;i++){
      for(int j=1;j<=y;j++){
        if(a[i]==b[j]){
          ans[i][j]=ans[i-1][j-1]+1;//注意,i-1和j-1不是代表上一位,而是這一位前最大的值
        }else{
          ans[i][j]=max(ans[i][j-1],ans[i-1][j]);
        }
      }
    }
    cout<<ans[x][y]<<endl;;
  }
}

以上就是“c++如何解決最長上升子序列和公共子序列問題”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

施甸县| 邹城市| 龙川县| 正蓝旗| 桂林市| 襄樊市| 肥东县| 登封市| 托克托县| 兰溪市| 凉城县| 岚皋县| 遵义市| 宿州市| 玉溪市| 绥化市| 琼海市| 稷山县| 民县| 鄂温| 昌图县| 揭西县| 扶风县| 辽源市| 绥中县| 交城县| 和林格尔县| 六盘水市| 清水县| 前郭尔| 宜良县| 汝城县| 新乡市| 东阿县| 扎赉特旗| 阿勒泰市| 泸定县| 鸡东县| 汉中市| 广德县| 英吉沙县|