poj 1836 Alignment
2014-01-17 16:10
246 查看
题目链接:http://poj.org/problem?id=1836
题目大意:将一队人的身高构成三角形,类似于1 2 3 2 1这样的,但是1 2 2 1也可以,方法就是分别从两侧进行dp求最长升序子序列,然后求最长的。。
AC代码:#include<stdio.h>
double h[1005],tall[1005],shor[1005],r[1005],l[1005];
int main()
{
int i,n,a,b=1,j,c;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf",&h[i]);
tall[0]=h[0];r[0]=l[n-1]=1;
for(i=1;i<n;i++){
for(a=0;a<b;a++){
if(tall[a]>=h[i]){
tall[a]=h[i];
break;
}
}
if(a==b)tall[b++]=h[i];
r[i]=b;
}
c=b;b=1;
shor[0]=h[n-1];
for(i=n-2;i>=0;i--){
for(a=0;a<b;a++){
if(shor[a]>=h[i]){
shor[a]=h[i];
break;
}
}
if(a==b)shor[b++]=h[i];
l[i]=b;
}
int maxn=l[n-1];
for(i=0;i<n;i++)
if(r[i]+l[i+1]>maxn)maxn=r[i]+l[i+1];
printf("%d",n-maxn);
return 0;
}
开的数组貌似有点多。。。
AC截图:
题目大意:将一队人的身高构成三角形,类似于1 2 3 2 1这样的,但是1 2 2 1也可以,方法就是分别从两侧进行dp求最长升序子序列,然后求最长的。。
AC代码:#include<stdio.h>
double h[1005],tall[1005],shor[1005],r[1005],l[1005];
int main()
{
int i,n,a,b=1,j,c;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf",&h[i]);
tall[0]=h[0];r[0]=l[n-1]=1;
for(i=1;i<n;i++){
for(a=0;a<b;a++){
if(tall[a]>=h[i]){
tall[a]=h[i];
break;
}
}
if(a==b)tall[b++]=h[i];
r[i]=b;
}
c=b;b=1;
shor[0]=h[n-1];
for(i=n-2;i>=0;i--){
for(a=0;a<b;a++){
if(shor[a]>=h[i]){
shor[a]=h[i];
break;
}
}
if(a==b)shor[b++]=h[i];
l[i]=b;
}
int maxn=l[n-1];
for(i=0;i<n;i++)
if(r[i]+l[i+1]>maxn)maxn=r[i]+l[i+1];
printf("%d",n-maxn);
return 0;
}
开的数组貌似有点多。。。
AC截图:
相关文章推荐
- poj1836 Alignment
- poj1836——Alignment(dp)
- POJ 1836: Alignment
- poj 1836:Alignment
- poj 1836 Alignment(最长上升子序列)
- POJ 1836 Alignment
- POJ 1836 - Alignment(最长递增子序列)
- POJ 1836 Alignment 最长上升子序列变形
- poj 1836 Alignment (DP)
- POJ 1836 Alignment
- Poj 1836 Alignment
- POJ-1836 Alignment (Romania OI 2002 线性dp 最长上升子序列)
- POJ 1836 Alignment
- poj_1836Alignment
- poj 1836 Alignment
- poj 1836 Alignment
- POJ - 1836 Alignment解题报告(dp求至少删除多少个数可以变成递增数列)
- poj 1836 Alignment
- POJ 1836-Alignment(DP/LIS变形)
- poj_1836Alignment