ACM PKU 2533 Longest Ordered Subsequence http://acm.pku.edu.cn/JudgeOnline/problem?id=2533

动态规划,最长递增子序列(不是非递减子序列);做法很简单,直接按照模板做就行了,主要是要想明白其中的道理,用什么存取加入第 i 个长度后当前的最长递增长度。两层循环,i 表示对第 i 个长度进行考察,j 表示对于 longer[i] 进行递增长度确定;写个状态转移方程就都明白了!

状态转移方程:

longer[i] = max{num[j]+1;其中1<j < i};

不知道对不对,总之就是这个意思吧!见笑了!!!

#include <iostream>
using namespace std;

int num[10001];
int longer[10001];
int longest;
int more_longer = 1;
int main ()
{
int N;
    cin >> N;
int i ,j;
for ( i = 0;i < N;i++)
   scanf("%d", &num[i]);
for (i = 1;i < N; i++)   //核心代码开始,算法推敲从这里开始!
{
   longest = 1;
   longer[0] = 1;
   for (j = 0;j < i; j++)
   {
    if (num[j] < num[i])
     if (longest <= longer[j]+1)
      longest = longer[j] + 1;
   } //核心代码结束,相信没有什么问题;有问题留言;
   longer[i] = longest;
   if (more_longer < longest)
    more_longer = longest;
  
}
cout << more_longer << endl;
return 0;
}

posted on 2011-05-06 19:05  _Clarence  阅读(96)  评论(0编辑  收藏  举报

导航