HDU 1025 (DP+二分法)

来源:互联网 发布:淘宝购物车地址管理 编辑:程序博客网 时间:2024/05/16 05:04
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int d[500010];int result[500010];int roadNum = 0;int dp(){   result[1] = d[1];   int index = 1;   for (int k=2;k<=roadNum;k++){       int p = d[k];       int start = 1;       int end = index;       while(start<=end){          int pp = (start + end) / 2;          if(result[pp] > p){              end = pp-1;          }else{              start = pp + 1;          }       }       result[start] = p;       if(start > index) index++;   }   return index;}int main(){    int op = 1;    while(~scanf("%d",&roadNum)) {        memset(d,0,sizeof(d));        memset(result,0,sizeof(result));        int x = 0;        int y = 0;        int k = roadNum;        while(k--) {            scanf("%d%d",&x,&y);            d[x] = y;        }        printf("Case %d:\n",op++);        printf("My king, at most %ld road can be built.\n",dp());    }    return 0;}

0 0