参见:LIS,LDS的另类算法(原)

然后讲讲我的想法:  有结论不上升子序列的个数=最长上升子序列的长度.....至于为什么,在下面讲

上代码:

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
class P
{
public:
int x,id; //x为数的大小,id为标记
}a[];
int main()
{
int n,i,j,number,minn,b[];
while(~scanf("%d",&n))
{
memset(a,,sizeof(a));
for(i=;i<n;i++)
scanf("%d",&a[i].x);
number=;
printf("LIS:\n");
for(i=;i<n;i++)
if(a[i].id==) //未被标记 ①
{
number++; //组数+1
a[i].id=number; //标记为组的编号 ②
minn=a[i].x; //更新最小值
for(j=i+;j<n;j++)
{
if(a[j].id== && a[j].x<=minn) //未被白标记且不大于最小值 ③
{
a[j].id=number; //标记为组编号
minn=a[j].x; //更新最小值 ④
}
}
}
for(i=n-,j=number;i>=;i--)
{
if(a[i].id==j) //找到满足编号及大小的数 ⑤
{
b[j]=a[i].x;
j--; //组编号-1
}
}
for(i=;i<=number;i++) ⑥
printf("%d ",b[i]);
printf("\nLIS number:");
printf("%d\n",number);
}
return ;
}

从第一个数据开始,找到第一个未被标记的数①,记录组编号,并标记为组编号②,再在这个数之后找未被标记的<=它的数③,标记为组编号,并更新最小值④,循环。

最后从最后一个数扫描,标记=编号--⑤的第一个数就记录下来,在就是正序输出这些数⑥。

例:   数组:9      10       6        7       2       1     8       4     3     5

组的编号:  1       2        1         2       1       1      3      2     2     3

从最后一个扫描,找到第一个编号为3的数:5

再找编号为2 的数:3

再找编号为1的数:1

所以顺序输出为1 3 5,长度3

从上得知,每一组出一个数组成最长上升子序列,这就是为什么最长上升子序列的长度=不上升子序列的个数了~~~

本来只是用来做俄罗斯套娃这道题,后来发现做导弹拦截系统这道题也可以,再发现就是求最长上升子序列,后来想办法把上升序列打出来,中间当然有很多错误,两个人慢慢讨论,一点点完善,修改,测试,就有个这段代码。

还是不懂的翻到最前面,戳进那个网页~\(≧▽≦)/~啦啦啦

最新文章

  1. 构建基于Chromium的应用程序
  2. Android 通过 Intent 传递类对象或list对象
  3. Basic linux command-with detailed sample
  4. NLog的使用
  5. SpringAOP使用扩展
  6. 解决SecureCRT中文编码乱码
  7. eclipse颜色 字体
  8. 获取手机IMEI 号和 IP
  9. Sql 语句添加字段、修改字段类型、默认值语法
  10. 超炫HTML5 SVG聊天框拖拽弹性摇摆动画特效
  11. I’m stuck!
  12. 【Android Developers Training】 105. 显示一个位置地址
  13. java集合系列——Map介绍(七)
  14. 分治法——归并排序(mergesort)
  15. tensorflow object detection
  16. MySQL加载配置文件的顺序
  17. 关于thymeleaf+layout布局的使用方式,spring boot 访问页面(静态页面及jsp页面)
  18. bzoj 1390: [Ceoi2008]Fence
  19. 学习笔记之Bitbucket
  20. 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告

热门文章

  1. oc37--类工厂方法
  2. DBI(i80)/DPI(RGB)/DSI【转】
  3. Android 6.0 中TimePicker显示为滚动样式的方法
  4. NYOJ15括号匹配
  5. word2vec和word embedding有什么区别?
  6. xml转换成数组array
  7. python请求服务器图片并下载到本地磁盘
  8. ROS-TF-新建坐标系
  9. ACM_写数字
  10. 【Leetcode】376. Wiggle Subsequence