• 上机实验题6--求最长单调递增子序列


     用数组b[0...n-1]记录a[i](0<=i<=n-1)为结尾元素的最长递增子序列的长度;

    序列a[]中的最长自增子序列的长度为 max(b[i])。

    //求最长单调递增子序列
    #include<stdio.h>
    #define MAXN 20
    void disp(int a[],int b[],int k){    //回推输出最长单调递增子序列
    	int i;
    	for(i=k-1;i>0;i--){
    		if(b[k] == b[i]+1 && a[i] <= a[k]){
    			disp(a,b,i);
    			break;
    		}
    	}
    	printf("%d ",a[k]);
    }
    int maxL(int b[],int n){	//求数组b中最大值下标 k
    	int i,k=0;
    	int max = b[0];
    	for(i = 0;i<n;i++){
    		if(max<b[i]){
    			max = b[i];
    			k = i; 
    		} 
    	}
    	return k;
    }
    void Maxsubseq(int a[],int b[],int n){    //求得数组b
    	int i,j,k;
    	b[0] = 1;
    	for(i=1;i<=n;i++){
    		k = 0;
    		for(j=0;j<i;j++)
    			if(a[j] <= a[i] && k < b[j])
    				k = b[j];
    		b[i] = k+1;
    	}
    } 
    int main(){
    	int a[] = {4,5,1,3,6,7,2,9,8};
    	int b[MAXN];
    	int n = 8,k;
    	Maxsubseq(a,b,n);
    	k = maxL(b,n);
    	printf("最长单调递增子序列最后元素下标k=%d
    ",k);
    	printf("最长单调递增子序列:");
    	disp(a,b,k);
    	printf("
    ");
    	return 0;
    } 
    

      

  • 相关阅读:
    002-html表格
    001-html常见的标记
    获取本地内外网ip地址
    Windows10设置默认简体美式键盘输入法
    C# 历史版本特性变更
    SQL Server Report Builder RDLC按记录数分页
    自动补全(备份)
    t:datagrid 行编辑 类型备份
    自动生成编号
    文本框上绑校验
  • 原文地址:https://www.cnblogs.com/Hqx-curiosity/p/12153112.html
Copyright © 2020-2023  润新知