设为首页 加入收藏

TOP

poj 1631 Bridging signals (LIS 最长递增子序列 DP-二分)
2014-11-23 21:58:39 】 浏览:1644
Tags:poj 1631 Bridging signals LIS 最长 递增 序列 DP-二分
思路:LIS 最长递增子序列,如果用一般的动态规划算法,复杂度是O(n^2),题目的数据规模下会超时,采用二分的思想:复杂度是O(nlogn)
代码:
首先是一般的DP:
#include  
#include  
#include  
using namespace std;  
const int MAX=40001;  
int dp[MAX],num[MAX];  
int main()  
{  
    int T;  
    cin>>T;  
    while(T--){  
        int p;  
        cin>>p;  
        for(int i=0;i>num[i];  
        memset(dp,0,sizeof(dp));  
        dp[0]=1;  
        for(int i=1;i 
  

二分的代码:
#include  
#include  
#include  
#include  
#include  
using namespace std;  
const int MAX=40001;  
int num[MAX],dp[MAX];  
int main()  
{  
    int T;  
    cin>>T;  
    while(T--){  
        int p;  
        cin>>p;  
        for(int i=0;i>num[i];  
        //vector dp;  
        int len=0;  
        //dp.push_back(num[0]);  
        dp[len++]=num[0];  
        for(int i=1;idp[len-1]) dp[len++]=num[i];  
            else{  
                int *pt=lower_bound(dp,dp+len,num[i]);  
                *pt=num[i];  
            }  
        }  
        cout< 
  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇HDU 3473 Minimum Sum (划分树) 下一篇HDU3714 Error Curves (单峰函数)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目