poj 1836 Alignment (LIS)
2011-11-29 18:58
387 查看
http://poj.org/problem?id=1836
题意:从一列士兵中剔除一些,使剩下的符合a1>a2>a3>...>ai ai+1<ai+2<....<aN-1<aN
思路:用了两个LIS分别从前往后和从后往前,得到啊a[],b[],最后取a[i]+b[i]的最大值;
View Code
题意:从一列士兵中剔除一些,使剩下的符合a1>a2>a3>...>ai ai+1<ai+2<....<aN-1<aN
思路:用了两个LIS分别从前往后和从后往前,得到啊a[],b[],最后取a[i]+b[i]的最大值;
View Code
#include<cstdio> #include<cstring> using namespace std; double s[1010],st[1010]; int a[1010],b[1010],n,rear,temp; int solve(double t) { int l=1,r=rear; while(l<=r) { int mid=(l+r)/2; if(st[mid]>=t) r=mid-1; else l=mid+1; } if(l>rear) rear=l; return l; } int main() { int i,j; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%lf",&s[i]); rear=0; for(i=1;i<=n;i++) { temp=solve(s[i]); st[temp]=s[i]; a[i]=rear; } rear=0; for(i=n;i>=1;i--) { temp=solve(s[i]); st[temp]=s[i]; b[i]=rear; } int max=0; for(i=1;i<=n-1;i++) for(j=1+i;j<=n;j++) if(a[i]+b[j]>max) max=a[i]+b[j]; printf("%d\n",n-max); return 0; }
相关文章推荐
- POJ 1836 Alignment (动态规划LIS)
- POJ 1836-Alignment(LIS-士兵列队)
- POJ 1836 Alignment (LIS)
- POJ-1836-Alignment-双向LIS-注意double精度
- POJ 1836 Alignment (线性dp LIS的两种姿势)
- POJ 1836 Alignment【LIS】
- POJ 1836 Alignment(DP | LIS)
- poj-1836-Alignment解题报告 LIS
- POJ 1836 Alignment 枚举中间点双向求LIS
- POJ 1836-Alignment(DP/LIS变形)
- POJ 1836 Alignment DP LIS
- POJ 1836 Alignment(LIS)
- POJ 1836 Alignment(LIS和LDS的结合题)
- POJ 1836 Alignment --LIS&LDS
- POJ 1836 Alignment LIS变形(最长上升子序列)
- POJ 1836 Alignment 最长递增子序列(LIS)的变形
- POJ 1836--Alignment(LIS,LCS)
- poj 1836 Alignment (DP LIS)
- POJ1836 - Alignment(LIS)
- POJ 1836 Alignment(DP LIS)