问题背景 |
动态规划入门-第13题 |
试题描述 |
设有整数序列b1,b2,b3,…,bm,若存在i1<i2<i3<…<in,且bi1<bi2<bi3<…<bin,则称 b1,b2,b3,…,bm中有长度为n的不下降序列bi1,bi2,bi3,…,bin。求序列b1,b2,b3,…,bm中所有长度(n)最大不下降子序列。例如3,18,7,14,10,12,23,41,16,24,其中3,18,23,24就是一个长度为4的不下降序列,同时也有3,7,10,12,16,24长度为6的不下降序列。 |
输入格式 |
第一行为n,表示n个数 第二行n个数 |
输出格式 |
最长不下降子序列的长度 |
输入示例 |
10 3 18 7 14 10 12 23 41 16 24 |
输出示例 |
6 |
注释说明 |
N小于5000 for each num <=maxint |
【分析】
dp入门,就是lis啦,不过这题目描述有点迷,看题目是不下降,看描述是上升,其实还是不下降,水题。
【代码】
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n, a[5050], dp[5050], ans; 5 6 int main() { 7 cin >> n; 8 for (int i=1;i<=n;++i) 9 cin >> a[i]; 10 for (int i=1;i<=n;++i) { 11 dp[i]=1; 12 for (int j=i-1;j>0;--j) 13 if (a[j]<=a[i]) 14 dp[i]=max(dp[i], dp[j]+1); 15 } 16 for (int i=1;i<=n;++i) 17 ans=max(ans, dp[i]); 18 cout << ans << endl; 19 }
---恢复内容结束---
时间: 2024-10-14 19:56:14