您的位置:首页 > 其它

cogs1398 最长上升子序列 动态规划初级

2017-04-30 20:34 211 查看
本宝宝写动态规划的第一道题=.=

写完就比较傻了...(大概的确是我比较水)

cogs原题:点击打开链接

基本动态规划思路:

搜索整个序列:对于每个数据pos,寻找前面的数据x,如果前面某个数据x小于当前数据pos,f【pos】取f【x】+1和f【pos】的最大值。

注意:1、别忘了初始化!!!!!(因为我曾经懵懂无知就没有写...)

    2、ans的更新!!!

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

const int NUM(1010);
int a[NUM],f[NUM],n;

int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
f[i]=1;							//注意①
}
int ans=1;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
if(a[j]<a[i])
{
f[i]=max(f[j]+1,f[i]);
ans=max(ans,f[i]);			//注意②
}
printf("%d",ans);
}


没错,这是个O(n^2)的算法,然后又学到了大牛的更快的算法~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: