设有由n(1≤n≤200)n(1≤n≤200)个不相同的整数组成的数列,记为:b(1)、b(2)、……、b(n)b(1)、b(2)、……、b(n)若存在i1
例如13,7,9,16,38,24,37,18,44,19,21,22,63,15
。例中13,16,18,19,21,22,63
就是一个长度为77的不下降序列,同时也有7 ,9,16,18,19,21,22,63
组成的长度为88的不下降序列。
第一行为nn,第二行为用空格隔开的nn个整数。
第一行为输出最大个数maxmax(形式见样例);
第二行为maxmax个整数形成的不下降序列,答案可能不唯一,输出一种就可以了,本题进行特殊评测。
14
13 7 9 16 38 24 37 18 44 19 21 22 63 15
max=8
7 9 16 18 19 21 22 63
一维dp问题,找到转移式就好了。
我们用dp数组来记录当前数字的最大不降序长度,那么每到一个数字,只要找到它之前的数字中,不大于它的数字的最大dp值就好。
最后从后往前按照dp值去找到数字,倒序输出即可。
- #include
- using namespace std;
- int dp[1001];
- int a[1001];
- int main()
- {
- int t;
- cin>>t;
- for(int i=0;i
- {
- cin>>a[i];
- }
- int m=0;
- for(int i=0;i
- {
- dp[i]=1;
- for(int j=0;j
- {
- if(a[i]>=a[j])dp[i]=max(dp[i],dp[j]+1);
- }
- m=max(m,dp[i]);
- }
- cout<<"max="<
- int b[1001];
- int c=0;
- for(int i=t-1;i>=0;i--)
- {
- if(dp[i]==m){
- b[c]=a[i];
- c++;
- m--;
- }
- }
- for(int i=c-1;i>=0;i--)
- {
- cout<" ";
- }
- cout<
- return 0;
- }
-
相关阅读:
虚心型性格分析,虚心型人格的职业规划
C++多线程编程:其六、unique_lock的使用
【机器学习&数据挖掘】基于自回归积分滑动平均模型的疫情分析报告 附完整python代码
【记一次el-select undefined】
QT QByteArray 的用法
java-使用jacob遍历outlook文件夹
【面向对象】【0x00】 Python面向对象介绍
【活动预告】金融大数据治理实践分享(12/03)
重学SpringBoot3-整合SSM
【Python】快速上手 Flask
-
原文地址:https://blog.csdn.net/Zero_979/article/details/126074304