万阿英,蒋达清: 有一条河流水平穿过一个区域。河流上下都有一组城市。河上的每个城市都与河下的城市相匹配,您可以将这种匹配作为一组配对。
您有兴趣在河对岸建造一组桥梁,以连接最大数量的匹配城市,但您必须这样做,使两座桥梁不相交。
测试用例:
5 3 10 6 4 1
我的方法: 我正在排序第一组,然后在第二组找到最大的增加子序列,但我仍然得到错误的答案。如果我的方法错误或程序中有任何错误,请帮助我?
#include<stdio.h>
int main()
{
int n,a[10],A[10],len,low,high,mid;
scanf("%d %d",&n,&a[0]);
A[0]=a[0];
len=1;
for(int i=1;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>A[len-1])
A[len++]=a[i];
else if(a[i]<A[0])
A[0]=a[i];
else
{
low=0;
high=len-1;
while(low<high)
{
mid=(low+high)/2;
if(A[mid]==a[i])
{
high=mid;
break;
}
if(A[mid]<a[i])
low=mid+1;
else
high=mid-1;
}
A[high]=a[i];
}
}
printf("%d",len);
return 0;
}