最長單調遞增子序列(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(≤105);第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(≤105);第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≤105);第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