求最长上升子序列
来源:互联网 发布:淘宝图片放大镜功能 编辑:程序博客网 时间:2024/06/15 03:02
由n个不相同的整数组成的数列,记为:a(1),a(2),…,a(n)且a(i)≠a(j)(i≠j),例如,3,18,7,14,10,12,23,41,16,24.若存在i1<
i2<i3<…<ie且有a(i1)<a(i2)<…<a(ie),则称其为长度为e的不下降子序列。如上例中3,18,23,24就是一个长度为4的不下降子序列,同时也有3,7,10,12,16,24长度为6的不下降子序列。程序要求,当原数列给出之后,求出最长的不下降子序列的数据个数。
输入文件:
第一行为N(1≤N≤5000),第二行为N个整数,之间用空格隔开。
输出文件:
最长的不下降子序列的数据个数。
输入样例:
10
3 18 7 14 10 12 23 41 16 24
输出样例:
6
动规思想
///正推/*#include<cstdio>#include<iostream>using namespace std;int main(){ int n,maxn=0; int a[5100]; int f[5100]={0}; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } f[1]=1; for(int i=2;i<=n;i++) { for(int j=1;j<i;j++) { if(a[i]>=a[j]) f[i]=max(f[i],f[j]+1); } } for(int i=1;i<=n;i++) { if(f[i]>maxn) maxn=f[i]; } printf("%d\n",maxn); return 0;}*////倒推#include<cstdio>#include<iostream>using namespace std;int main(){ int n,maxn=0; scanf("%d",&n); int a[110]; int f[110]; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); f[i]=1; } for(int i=n-1;i>=1;i--) { for(int j=i+1;j<=n;j++) { if(a[j]>a[i]) f[i]=max(f[i],f[j]+1); } } for(int i=1;i<=n;i++) { if(f[i]>maxn) maxn=f[i]; } printf("%d\n",maxn); return 0;}
0 0
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 求最长上升子序列
- 动态规划求最长上升子序列
- 求最长的上升子序列
- 求最长上升子序列的长度
- 求最长上升子序列的长度
- STL求最长上升子序列
- lis求最长上升子序列问题
- 动态规划:求最长上升子序列
- 求最长上升不一定连续子序列
- 二分求最长上升子序列
- 求最长上升子序列的问题
- LIS 求最长上升子序列长度
- 动态规划----求最长上升子序列
- 最长上升子序列
- 快的打车架构实践
- applium学习资料
- 全局唯一订单号生成方法(参考snowflake)
- QListWidget 显示图片
- hdu 5573 Binary Tree【思维+递推】
- 求最长上升子序列
- NBOJv2 1034 Salary Inequity(DFS序+线段树区间更新区间(最值)查询)
- IllegalArgumentException: Unable to locate adb
- js中join()与 split()的对比
- abel533 / ECharts
- JS获取当前使用的浏览器名字以及版本号
- Application context和Activity context的区别
- VC的「附加依赖项」、「库目录」和「包含目录」分别有什么用?
- UITableView错误