sdutoj 1299 最长上升子序列 题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1299
DP LIS O(nlogn)
第二遍做了,优化到nlogn了。
code:
#include<stdio.h>
int main()
{
int n,i,j,a[1010],dp[1010],l,r,mid,ans;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
dp[0]=a[0];
ans=1;
for(i=1;i<n;i++)
{
l=1;
r=ans;
while(l<=r)
{
mid=(l+r)/2;
if(dp[mid]<a[i])l=mid+1;
else r=mid-1;
}
dp[l]=a[i];
if(l>ans)ans++;
}
printf("%d\n",ans);
}
return 0;
}
本文详细解析SDUTOJ平台上的1299题——最长上升子序列问题,提供了解题思路及优化至nlogn的时间复杂度的代码实现。通过二分查找法,实现高效的解决方案。

19万+

被折叠的 条评论
为什么被折叠?



