Constructing Roads In JGShining's Kingdom(HDU1025)(LCS序列的变行)

Constructing Roads In JGShining's Kingdom  HDU1025

 

题目主要理解要用LCS进行求解!

并且一般的求法会超时!!要用二分!!!

最后蛋疼的是输出格式的注意(直接报错误!!!)

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<string.h>
 5 using namespace std;
 6 int a[500005],dp[500005];
 7 int main()
 8 {
 9     int n,i,a1,b1,len,j,d=0,left,right,mid;
10     while(scanf("%d",&n)!=EOF)
11     {
12         for(i=0;i<n;i++)
13         {
14             scanf("%d%d",&a1,&b1);
15             a[a1]=b1;
16         }
17         dp[0]=-1;
18         len=0;
19         for(i=1;i<=n;i++)
20         {
21            if(dp[len]<=a[i])
22            {
23                len++;
24                dp[len]=a[i];
25            }
26            else
27            {
28                left=0;
29                right=len;
30                while(right-left>1)
31                {
32                    mid=(left+right)/2;
33                    if(a[i]>dp[mid])
34                     left=mid;
35                    else
36                     right=mid;
37                }
38                dp[right]=a[i];
39            }
40         }
41         printf("Case %d:\n",++d);
42         if(len>1)
43             printf("My king, at most %d roads can be built.\n\n",len);
44         else
45             printf("My king, at most %d road can be built.\n\n",len);//没有这个,直接报错误!!!找了好久啊。。。
46     }
47     return 0;
48 }

 

posted on 2013-09-01 19:39  ~~碾压机  阅读(173)  评论(0编辑  收藏  举报