本宝宝写动态规划的第一道题=.=
写完就比较傻了...(大概的确是我比较水)
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);
}