搜索
查看: 1909|回复: 1
打印 上一主题 下一主题

[图论]一个叫做LIS(最长不下降子序列)的东西

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-20 21:00:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
输入数据:
10
2 8 10 1 5 1 7 8 6 5
输出数据:
4






  1. #include <stdio.h>
  2. int main()
  3. {
  4.   int a[1000],g[1000];
  5.   int i,k,n,max;
  6.    
  7.   scanf("%d",&n);
  8.   for(i=1;i<=n;i++) scanf("%d",&a[i]);
  9.   //动规边界,初始化
  10.   g[1]=1;
  11.   //动规开始
  12.   for(i=2;i<=n;i++)
  13.   {
  14.     g[i]=1;//初值,这里很用重要。。。。。位置不要写错,要在for(j)循环的外面
  15.     //每次找i前面所有的数,所以是1到i-1
  16.     for(k=1;k<=i-1;k++)
  17.     {
  18.       //枚举前面的每个数是不是比当前这个数小, 注意这里是不下降子序列,所以是小于等于
  19.       if( a[i] <= a[k])
  20.       {
  21.         if( g[i] < g[k]+1 )
  22.           g[i] = g[k] + 1;
  23.       }        
  24.     }
  25.   }
  26.   //g 数组里面找最大的1个
  27.   max=0;
  28.   for(i=1;i<=n;i++)
  29.   {
  30.     if( max < g[i] )
  31.       max = g[i];
  32.   }
  33.   printf("%d",max);
  34.   return 0;
  35. }
复制代码

沙发
发表于 2013-2-20 21:57:07 | 只看该作者
xuexile
.................
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表