POJ 1836 Alignment
2012-08-30 18:53
411 查看
最长上升子序列的变形,不过题目有点问题,怎么看怎么Wrong.要考虑中间的如果i ->j是上升的,j -> n-1是下降也是可以。还有中间有两个相等的也可以。主要注意这个就可以了。
代码:
代码:
#include<iostream> #include<cmath> #include<string.h> using namespace std; int dp1[1005],dp2[1005]; double a[1005]; int main() { int n,i,j,mx; while( scanf("%d",&n)!=EOF){ memset(dp1,0,sizeof(dp1)); memset(dp2,0,sizeof(dp2)); for(i=0;i<n;i++){ scanf("%lf",&a[i]); dp1[i]=dp2[i]=1; } for( i=n-2;i>=0;i--) for( j=i+1;j<n;j++) if( a[i]>a[j]) dp2[i]=max(dp2[i],dp2[j]+1); for( i=1;i<n;i++) for( j=0;j<i;j++) if( a[i]>a[j]) dp1[i]=max(dp1[i],dp1[j]+1); mx=0; for( i=0;i<n;i++) mx=max(mx,dp1[i]+dp2[i]-1); for( i=0;i<n;i++) for( j=i+1;j<n;j++) if(a[i]==a[j]) mx=max(mx,dp1[i]+dp2[j]); printf("%d\n",n-mx); } return 0; }
相关文章推荐
- POJ 1836 Alignment
- POJ 1836 Alignment(LIS变形)
- POJ 1836-Alignment(LIS-士兵列队)
- poj 1836 Alignment( 最长上升(下降)子序列 )
- POJ 1836 Alignment 枚举中间点双向求LIS
- POJ 1836 Alignment
- POJ 1836 Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- POJ 1836 Alignment 士兵队列
- 【POJ 1836】 Alignment
- poj 1836 Alignment (LIS)
- POJ 1836 Alignment (动态规划LIS)
- POJ 1836 Alignment(DP LIS)
- 【poj 1836】Alignment 题意&题解&代码(C++)
- POJ 1836 Alignment
- POJ 1836 Alignment 最长上升(下降)子序列(dp)
- poj 1836 Alignment
- [poj 1836] Alignment 最长上升子序列
- POJ1836 - Alignment(LIS)