Climber.pI的OI之路

Through the darkest dark,may we see the light.

Tyvj 1049 最长不下降子序列

经典的最长不下降子序列问题,O(n^2)【还存在基于二分查找的O(nlogn)算法】

方程:if(a[j]<=a[i]) f[i] = max{f[j]} (0<j<i, 1<i<=n)

可能是今天状态不好,一直在纠缠细节.需要注意的是,子序列长度的最大值不一定在f[n]中.

 1#include<iostream>
 2using namespace std;
 3int a[5001], b[5001];
 4int max(int x, int y) {return (x > y) ? x : y;}
 5int main()
 6{
 7    int i, j, n, ans;
 8    cin >> n;
 9    for (i = 1; i <= n; i++{cin >> a[i]; b[i] = 1;}
10    for (i = 2; i <= n; i++)
11    {
12        for (j = 1; j < i; j++)
13            if (a[j] <= a[i] && b[j]+1 > b[i])
14                b[i] = b[j]+1;
15    }

16    for (i = 1; i <= n; i++
17        if (ans < b[i]) ans = b[i];
18    cout << ans << endl;
19}

20


马上要走了,高中还是麻烦很多,进度让人纠结.

posted on 2010-09-11 21:11 Climber.pI 阅读(345) 评论(0)  编辑 收藏 引用 所属分类: 动态规划


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理