最长上升子序列
来源:互联网 发布:电视直播软件hdp 编辑:程序博客网 时间:2024/06/14 11:38
给定一个序列,求其最长子序列的长度
假设序列为 3 6 2 3 4
第一个数是 3 前面没有比 3 小的,所以 dp[0]=1;
第二个数是 6 前面 3 比 6 小,所以 dp[1]=dp[0]+1;
第三个数是 2 前面没有比 2 小的,所以 dp[2]=1;
#include<cstring>
using namespace std;
int dp[1000],a[1000];
int main()
{
int n;
while(cin>>n)
{
int ans=0;//记录长度
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++)
{
cin>>a[i];
}
for(int i=0; i<n; i++)
{
dp[i]=1;
for(int j=0; j<i; j++)
{
if(a[j]<a[i])
{
dp[i]=max(dp[i],dp[j]+1);//不断更新,找出最大值
}
}
ans=max(ans,dp[i]);//不断更新,找出最大值
}
cout<<ans<<endl;
}
return 0;
}
假设序列为 3 6 2 3 4
第一个数是 3 前面没有比 3 小的,所以 dp[0]=1;
第二个数是 6 前面 3 比 6 小,所以 dp[1]=dp[0]+1;
第三个数是 2 前面没有比 2 小的,所以 dp[2]=1;
第四个数是 3 前面有比 3 小的,所以 dp[3]=dp[2]+1;
第五个数是 4 前面有比 4 小的,所以 dp[2]=max(dp[0],dp[2],dp[3])+1;
d(i)=max(1,d(j)+1),i>j,且a[i]>a[j];
#include<iostream>#include<cstring>
using namespace std;
int dp[1000],a[1000];
int main()
{
int n;
while(cin>>n)
{
int ans=0;//记录长度
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++)
{
cin>>a[i];
}
for(int i=0; i<n; i++)
{
dp[i]=1;
for(int j=0; j<i; j++)
{
if(a[j]<a[i])
{
dp[i]=max(dp[i],dp[j]+1);//不断更新,找出最大值
}
}
ans=max(ans,dp[i]);//不断更新,找出最大值
}
cout<<ans<<endl;
}
return 0;
}
阅读全文
0 0
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 最长上升子序列
- 《C++内存泄漏》经验汇总
- Golang json用法详解(一)
- 极速扫码——zbar扫码库性能优化实践
- php的curl函数模拟post、get数据提交,速度非常慢的处理办法
- 首字母大写的json串转为javabean
- 最长上升子序列
- C++实训3_1
- 几维安全携KiwiVM虚拟机亮相看雪峰会
- OpenCV 中腐蚀和膨胀
- CSS3 简介 (三)
- multiprocessing对僵尸进程的处理
- python-访问模型
- 在Go语言中使用JSON(去掉空字段)
- linux线程编程基础