poj 1836 Alignment(dp)

题目:http://poj.org/problem?id=1836

题意:最长上升子序列问题, 站队,求踢出最少的人数后,使得队列里的人都能看到 左边的无穷远处 或者 右边的无穷远处。

代码O(n^2):

 #include<iostream>
#include<cstring>
using namespace std; int main()
{
int n,i,j,d1[],d2[],mx;
double a[];
cin>>n;
for(i=; i<=n; i++)
cin>>a[i];
d1[]=;
for(i=; i<=n; i++)
{
mx=;
for(j=; j<i; j++)
if(a[i]-a[j]>&&d1[j]>=mx)
{
mx=d1[j]+;
}
d1[i]=mx;
}
d2[n]=;
for(i=n-; i>=; i--)
{
mx=;
for(j=n; j>i; j--)
if(a[i]-a[j]>&&d2[j]>=mx)
{
mx=d2[j]+;
}
d2[i]=mx;
}
mx=-;
for(i=; i<=n; i++)
for(j=i+; j<=n; j++)
if(d1[i]+d2[j]>mx)
mx=d1[i]+d2[j];
cout<<n-mx<<endl;
return ;
}
上一篇:你可能不知道的Animation动画技巧与细节


下一篇:Binders 与 Window Tokens(窗体令牌)