问题:有一条河流水平流过一个区域。河流上方和下方有一组城市。河流上方的每个城市都与河流下方的城市匹配,并且您将获得该匹配作为一组配对。
您有兴趣在河上建造一组桥梁以连接最多的匹配城市对,但您必须以没有两座桥梁彼此相交的方式这样做。
测试用例:
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;
}