求数组中最长递增子序列
来源:互联网 发布:js日期写出某天的日期 编辑:程序博客网 时间:2024/06/06 00:02
#include<stdio.h>
/*
求数组中最长递增子序列长度:
例如:a[10]={1,-1,2,-2,3,-3,4,-4,5,6},递增序列为1,2,3,4,5,6
基本思想:
对于子序列a[0-i],它的最长子序列长度为b[i],
对于子序列a[0-i+1],它的最长子序列有两种情况:
一种是前面的都比a[i+1]大,那么它的最长子序列就是a[i]的最长子序列
一种是前面有比a[i+1]小的数字,那么它的最长子序列就是a[0-i]中取比a[i+1]小的最长子序列加一,
不用关注具体的序列,如果a[i+1]>a[i],那么a[0-i+1]的最长子序列一定是b[0-i]中某个数加一。
*/
void main()
{
int i,j;
int a[10]={1,-1,2,-2,3,-3,4,-4,5,6};
int b[10];
b[0]=1;
for(i=0;i<10;i++){
b[i]=1;
for(j=0;j<i;j++){
if((a[i]>a[j])&&(b[i]<=b[j])){
b[i]=b[j]+1;
}
}
}
//下面把b[i]=1的全部替换成b[0-i]中最大的数
j=b[0];
for(i=0;i<10;i++){
if(b[i]==1){
b[i]=j;
}
else{
if(b[i]>j){
j=b[i]; //把j替换成b[0-i-1]中最大的数
}
}
printf("a[i]前的最长递增序列长度为:%d \n",b[i]);
}
}
/*
求数组中最长递增子序列长度:
例如:a[10]={1,-1,2,-2,3,-3,4,-4,5,6},递增序列为1,2,3,4,5,6
基本思想:
对于子序列a[0-i],它的最长子序列长度为b[i],
对于子序列a[0-i+1],它的最长子序列有两种情况:
一种是前面的都比a[i+1]大,那么它的最长子序列就是a[i]的最长子序列
一种是前面有比a[i+1]小的数字,那么它的最长子序列就是a[0-i]中取比a[i+1]小的最长子序列加一,
不用关注具体的序列,如果a[i+1]>a[i],那么a[0-i+1]的最长子序列一定是b[0-i]中某个数加一。
*/
void main()
{
int i,j;
int a[10]={1,-1,2,-2,3,-3,4,-4,5,6};
int b[10];
b[0]=1;
for(i=0;i<10;i++){
b[i]=1;
for(j=0;j<i;j++){
if((a[i]>a[j])&&(b[i]<=b[j])){
b[i]=b[j]+1;
}
}
}
//下面把b[i]=1的全部替换成b[0-i]中最大的数
j=b[0];
for(i=0;i<10;i++){
if(b[i]==1){
b[i]=j;
}
else{
if(b[i]>j){
j=b[i]; //把j替换成b[0-i-1]中最大的数
}
}
printf("a[i]前的最长递增序列长度为:%d \n",b[i]);
}
}
0 0
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- Android 自定义柱状图及属性动画
- Apache Http Server学习笔记
- JBoss启动项目报错
- 创建守护进程
- Android开发无法关联源码
- 求数组中最长递增子序列
- http://dongxi.douban.com/article/1144963/
- thinkphp 判断volist 最后一条
- ArcGIS提取CAD数据
- 如何通过pl/sql将excel文件数据导入到oracle
- mybatis重拾---部署官方demo
- DDR内存配置
- Linux下区分物理CPU、逻辑CPU和CPU核数
- codeforces A. k-String 题解