0

问题:有一条河流水平流过一个区域。河流上方和下方有一组城市。河流上方的每个城市都与河流下方的城市匹配,并且您将获得该匹配作为一组配对。

您有兴趣在河上建造一组桥梁以连接最多的匹配城市对,但您必须以没有两座桥梁彼此相交的方式这样做。

测试用例:

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;
    }
4

0 回答 0