/*

47.创新工场:

求一个数组的最长递减子序列

比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}

一看就是DP题目

设源数组为A,我们定义一个长度与A相同的辅助数组为B,

B[i]表示以A[i]结尾的最长递减序列的长度。

B[i]=max{B[k]+1,A[i]

题目要求输出递减的序列

倒着来 B[i]表示以A[i]结尾的最长递减序列的长度,最大的肯定就是末尾元素

如何 搜寻前面的数?B[i]+1==B[k] && A[i]>A[k]时,A[i]就是前一个元素;

还有种方法输出,就是再用一个数组,存储前一个递减序列的位置

if(a[i]

max=dp[j]+1;

id=j;

*/

#include

#include

using namespace std;

int dp[100],id[100];

void printPath(int a[],int dp[],int k)

{

int i;

for(i=k;i>=0;i--)//k表示的是递减序列的位置

{

if(a[i]>a[k]&&dp[i]+1==dp[k])

{

printPath(a,dp,i);

break;

}

}

printf("%d ",a[k]);

}

void max_dec_subseq(int a[],int len)

{

int i,j,max,start=0,max_all;

dp[0]=1;//一个本身就是递减序列

max_all=0;//放最大的递减长度的位置

for(i=1;i

{

max=0;

for(j=0;j

{

if(a[i]

max=dp[j]+1;

}

dp[i]=max;

if(dp[max_all]

max_all=i;

}

printPath(a,dp,max_all);

}

int main()

{

int a[]={9,4,3,2,5,4,3,2};

int b[]={9,8,6,5,4,3,2,1,9};

max_dec_subseq(a,sizeof(a)/sizeof(int));

printf("\n");

max_dec_subseq(b,sizeof(b)/sizeof(int));

return 0;

}

数组的最长递减子序列java_47.创新工场: 求一个数组的最长递减子序列 | 学步园...相关推荐

  1. 算法 求一个数组的最长递减子序列 C

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! //** ...

  2. 算法 - 求一个数组的最长递减子序列(C++)

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /** 求一个数组的最长递减子序列 - C++ - ...

  3. 《团队开发一(求一个数组的连续的子数组之和的最大值)》

    <团队开发一(求一个数组的连续的子数组之和的最大值)> (1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的 ...

  4. java 最大子数组_求一个数组中子数组的最大和算法(Java实现)

    前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...

  5. 求一个数组的非空子集

    //求一个数组的子集 #include <vector> #include<iostream> using namespace std; vector<vector< ...

  6. array_combine() - 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

    一.创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 array_column() 参数 必须 示例 数组的值被作为新数组的键 非法的值将会被转换成字符串类型 是 $a = array( ...

  7. 13.在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。(左神算法基础班源码)

    package basic_class_01; /*** *小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和.求一个数组的小和.例子:[1,3,4,2,5]1左边比1小的数 ...

  8. 【算法题】求一个字符串的最长不重复子串

    [题目描述] 求一个字符串的最长不重复子串.比如:给定"abcabcbb"的答案是"abc",长度是3:给定"bbbbb"的答案是" ...

  9. python求数组平均值_用python求一个数组的和与平均值的实现方法

    用python求一个数组的和与平均值的实现方法 如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:&q ...

  10. js:如何把一个数组的每一项值加入到另外一个数组对象中

    需求:把一个数组的每一项值加入到另外一个数组对象中 原数组: 转换为: let arr = [{id: "1",name: "香蕉"}, {id: " ...

最新文章

  1. 全国计算机建模三等奖,2009年全国数学建模真题(论文获国家 三等奖).doc
  2. (转)教你实现Winform窗体的四边阴影效果
  3. 当 position:sticky 遇到 bootstrap 浮动布局时候的踩坑记录
  4. kali linux 截图位置,Kali Linux中使用shutter截图工具 | CN-SEC 中文网
  5. cacti yum快速部署
  6. Java常用的几个Json库
  7. 不能随意切换的Tab选项卡页面
  8. sas编程技术教程 人大经济论坛sas培训
  9. 在Ubuntu上用wine下载QQ,三种打开QQ的方法
  10. 经纬度坐标转换xy坐标 python_Python 高斯坐标转经纬度算法
  11. python单因素方差分析_Python数据科学:方差分析
  12. PandoraBox Openwrt 上面设置DNS
  13. JAVA web中的一点东西
  14. javascript设计模式-策略模式(Strategy)
  15. IC卡参数、公钥之 RID、AID
  16. 2022.12.29
  17. 借助谷歌翻译API实现网站多国语言翻译功能
  18. python爬取《你好, 李焕英》豆瓣评论数据
  19. 数学分析原理 第2卷 第9版
  20. Windows平台下的内存泄漏检测

热门文章

  1. 190425每日一句
  2. kinect 2.0 SDK-深度图与彩色图对齐
  3. Atitit 法学处罚方式模式 目录 1. 申诫罚、财产罚和能力罚 1 1.1. 申诫罚 (警告和通报批评 ) 1 1.2. 财产罚是指使被处罚人的财产权利和利益受到损害的行政处罚。 2 1.2
  4. atitit agt sys 设置下级代理功能设计.docx
  5. paip.自定义java 泛型类与泛型方法的实现总结
  6. 望眼科技:另类资产管理数据--夜光数据
  7. 什么是0day漏洞,1day漏洞和nday漏洞
  8. Rust: 镜像设置要注意影响效果
  9. (转)以C++为核心语言的高频交易系统的讨论?
  10. SQLite:注意查询条件中空格的影响