建筑桥梁动态规划

时间:2013-05-28 18:31:13

标签: dynamic-programming

万阿英,蒋达清: 有一条河流水平穿过一个区域。河流上下都有一组城市。河上的每个城市都与河下的城市相匹配,您可以将这种匹配作为一组配对。

您有兴趣在河对岸建造一组桥梁,以连接最大数量的匹配城市,但您必须这样做,使两座桥梁不相交。

测试用例:

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

0 个答案:

没有答案