1. 程式人生 > >最長單調遞增子序列(O(n^2))

最長單調遞增子序列(O(n^2))

#include "iostream"
#include "fstream"
using namespace std;

/*
b[i]表示長度為i的子序列c[i]中,由若干元素組成的最長單調遞增子序列的長度
b[1] = 1
b[i] = max{b[k]} + 1   c[k]<=c[i], 1<=k<=i
*/

int b[100];
int c[100];

int increase(int n)
{
    b[1] = 1;
    int max;
    for(int i=2; i<=n; i++)
    {
        max = 0;
        for
(int k=1; k<=i; k++) if(c[k] <= c[i] && max < b[k]) max = b[k]; b[i] = max + 1; } int temp = 0; for(i=1; i<=n; i++) if(b[i] > temp) temp = b[i]; return temp; } int main() { int n; cout << "輸入序列長度:"
; cin >> n; cout << "輸入子序列:"; for(int i=1; i<=n; i++) cin >> c[i]; int count = increase(n); cout << "最長單調遞增子序列為:" << count << endl; return 0; }

這裡寫圖片描述

相關推薦

單調遞增序列O(n^2))

#include "iostream" #include "fstream" using namespace std; /* b[i]表示長度為i的子序列c[i]中,由若干元素組成的最長單調遞增子序列

動態規劃之單調遞增序列C++原始碼)

動態規劃之最長單調遞增子序列 問題: L={a1,a2,a3,…,an}既L是由n個不同的實陣列成的序列,求L的最長單調遞增子序列(下標可不連續)。 分析: 設輔助陣列b,b[i]表示以a[i]為結尾的最長遞增子序列的長度,最長遞增子序列的長度,就是陣列b的最大

單調遞增序列O(nlogn)

#include "iostream" #include "fstream" using namespace std; /* b[k]表示長度為i的子序列c[i]中,長度為k的最長單調遞增子序列的最小

時間複雜度為O(nlogn)的單調遞增序列

寫一記,其中利用二分查詢法,具體分析見程式設計之美。 #include <iostream> using namespace std; #define N 20 int binarySearch(int src[], int des, int low, int

單調遞增序列( O(nlgn) )

          最長單調遞增子序列 設A是n個不同正整數構成的序列,求A的一個最長遞增子序列。例如序列為1,5,3,8,10,6,4,9;它的最長遞增子序列為1,5,8,10;1,5,8,9;...。 這是一道很典型的動態規劃題目。設fi表示結尾元素為原序列中第i個元素

[dp]單調遞增序列

bsp 存在 ont for printf iss 需要 hellip 註意 https://www.51nod.com/tutorial/course.html#!courseId=12 解題關鍵: 如果將子序列按照長度由短到長排列,將他們的最大元素放在一起,形成新序

[C++] 動態規劃之矩陣連乘、公共序列大子段和、單調遞增序列

每次 種子 () return 避免 amp 可能 text com 一、動態規劃的基本思想   動態規劃算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。   將待求解問題分解成若幹個子問題,先求

習題3.4 連續遞增序列20 分)浙大版《數據結構2版)》題目集

space align font list 格式 ott mar 不能 第一次 給定一個順序存儲的線性表,請設計一個算法查找該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。 輸入格式: 輸入

NYOJ17 單調遞增序列 線性dp

tar 最長 using print code \n clu sca can 題目鏈接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17 分析: i=1 dp[i]=1 i!=1 dp[i]=max(dp[j]+

7-7 連續遞增序列20 分) 普通STL解出

這道題我看了一下  決定寫。 在寫之前網上看到很多高手的題解,深表敬意。 只是我想用STL來完成一下這道題。 7-7 最長連續遞增子序列(20 分) 給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,

連續遞增序列java)

給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。 輸入格式: 輸入第1行給出正整數n(≤10​5​​);第2行給出n個整數,其間以空格分隔。 輸出格式:

動態規劃——單調遞增序列

題目描述 用動態規劃設計一個演算法,要求找出由n個整陣列成的序列的最長單調遞增子序列的個數(假設所有的元素都不相同)。 輸入 第一行輸入一個整數,表示有n個整數。 第二行輸入n個整數。 輸出 第三行輸出最長單調遞增子序列的個數。 樣例輸入 6 1 3 2 5

7-7 連續遞增序列20 分)

7-7 最長連續遞增子序列(20 分) 給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。 輸入格式: 輸入第1行給出正整數n(≤10​5​​);第2行給

浙大版《資料結構》習題3.4 連續遞增序列20 分)

給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。 輸入格式: 輸入第1行給出正整數n(≤105)n(≤105);第2行給出n個整數,其間

習題3.4 連續遞增序列20 分)

#include<stdio.h> int main() {   int n,i=0;   scanf("%d",&n);   int num[100001]={0,0,};   while(n-->0)       scanf("%d",&

單調遞增序列的三種解法

問題描述:找出由n個數組成的序列的最長單調遞增子序列 解法一:轉化成LCS問題求解,時間複雜度為O(n*n). 思路:原序列為A,把A按升序排序得到序列B,求出A,B序列的最長公共子序列,即為A的最長

連續遞增序列部分有序)

題目:(1,9,2,5,7,3,4,6,8,0,)中最長的遞增子序列為(3,4,6,8)。 程式碼: public class 最長遞增子序列 { public static void main(String[] args) { int []arr = {1,0,2,5,7,3,4,6

pta 習題集 5-5 連續遞增序列 dp)

給定一個順序儲存的線性表,請設計一個演算法查詢該線性表中最長的連續遞增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最長的遞增子序列為(3,4,6,8)。 輸入格式: 輸入第1行給出正整數nn(≤105≤10​5​​);第2行給出nn個整數,其間以空格分隔

nyoj 17 資料結構 單調遞增序列

單調遞增最長子序列 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4 描述求一個字串的最長遞增子序列的長度 如:dabdbf最長遞增子序列就是abdf,長度為4

單調遞增序列--幾種方法

設給定的序列為num[n] 1.O(n^2)的求法 動態規劃的方法 狀態定義:設dp[i] 表示以num[i]結尾的最長單調遞增子序列的長度 狀態方程:dp[i] = max(dp[k] + 1