POJ 1836 Alignment
2013-09-05 14:44
274 查看
题目大意:
给定一排人的身高,求踢出最少的人可以使队列身高如下形状:
(感谢大神提供图片)
这个题比较简单,顺序一遍最长上升子序列,逆序一遍最长上升子序列,最后处理一下数据就行。
下面是代码:
给定一排人的身高,求踢出最少的人可以使队列身高如下形状:
(感谢大神提供图片)
这个题比较简单,顺序一遍最长上升子序列,逆序一遍最长上升子序列,最后处理一下数据就行。
下面是代码:
#include <stdio.h> #include <string.h> const int MAX=1005; int main() { int n,dpl[MAX],dpr[MAX]; double hi[MAX]; while(scanf("%d",&n)!=EOF) { int i,j; for(i=0; i<n; i++) { scanf("%lf",&hi[i]); } memset(dpr,0,sizeof(dpr)); memset(dpl,0,sizeof(dpl)); dpl[0]=1; for(i=1;i<n;i++) { dpl[i]=1; for(j=i-1;j>=0;j--) { if(hi[j]<hi[i]&&dpl[j]+1>dpl[i]) { dpl[i]=dpl[j]+1; } } } dpr[n-1]=1; for(i=n-2;i>=0;i--) { dpr[i]=1; for(j=i+1;j<=n-1;j++) { if(hi[j]<hi[i]&&dpr[j]+1>dpr[i]) { dpr[i]=dpr[j]+1; } } } int ans=dpl[n-1]; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(dpl[i]+dpr[j]>ans) { ans=dpl[i]+dpr[j]; } } } printf("%d\n",n-ans); } return 0; }
相关文章推荐
- POJ-1836-Alignment-双向LIS-注意double精度
- poj 1836 Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- POJ:1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- Alignment(POJ--1836
- poj-1836-Alignment
- POJ 1836 Alignment(LIS和LDS的结合题)
- poj-1836 Alignment
- POJ 1836 Alignment
- POJ-1836-Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment
- POJ 1836 Alignment(DP | LIS)
- POJ 1836 Alignment