• hdu1025(dp+二分)


    参考自:http://blog.csdn.net/ice_crazy/article/details/7536332
    
    #include <iostream>
    #include <cstdio>
    #include <string.h>
    using namespace std;
    int n,s[999999],head[999999];
    int fun()
    {
        int len,i,mid,l,r;
        memset(head,0,sizeof(head));
        head[1]=s[1];
        len=1;
        for (i=2;i<=n;++i)//采用二分查找
        {
            l=1;
            r=len;
            while(l<=r)
            {
                mid=(l+r)/2;
                if (s[i]>head[mid])//从中开始比较并插入
                l=mid+1;
                else
                r=mid-1;
            }
            head[l]=s[i];//把小元素放入,但未改变现在所得到的子序列,其中head数组是动态变化的
            if (l>len)//当head数组的长度变大后,更新最大长度
            len=l;
        }
        return len;
    }
    int main()
    {
        int k=1,a,b,i,ans;
        while(scanf("%d",&n)!=EOF)
        {
            for (i=1;i<=n;++i)
            {
                scanf("%d%d",&a,&b);
                s[a]=b;//建立一一对应关系,抽象成最长子序列模型
            }
            int ans=fun();
            printf ("Case %d:\n",k++);
            if (ans==1)
            printf ("My king, at most 1 road can be built.\n\n");
            else//大于1时,后面要加s
            printf ("My king, at most %d roads can be built.\n\n",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    MySql 数据类型
    MySql 数据库的增删改
    MySql 联合查询
    Mysql 库的管理 --->>>>DDL
    MySql 子查询
    MySql 分页查询
    sql99语法的连接查询
    MySql 连接查询
    MySql 分组函数
    jQ处理页面中尺寸过大的图片
  • 原文地址:https://www.cnblogs.com/1994two/p/3055568.html
Copyright © 2020-2023  润新知