// 类似于lis的求解 就是增加了下标之间的差值要满足大于d 有些不同 好好理解了下还是有点模糊的 以后还得再琢磨琢磨
// main.c
// example
//
// Created by Adam on 15/2/2.
// Copyright (c) 2015年 Adam. All rights reserved.
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "algorithm"
#include <queue>
#include <stack>
#define N 100005
#define INF 1<<30
using namespace std;
int dp[N];
int ss[N];
int a[N];
int n, k;
int Binary_search(int ans) //二分查找加入该元素 可形成的序列的长度
{
int l = 1, r = n;
while(l <= r)
{
int mid = (l + r) >> 1;
if(ans > ss[mid])
l = mid + 1;
else
r = mid - 1;
}
return l;
}
int main()
{
while(scanf("%d%d", &n, &k) != EOF)
{
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
ss[i] = INF;
}
int ans = 0;
for(int i = 1; i <= n; i++)
{
dp[i] =Binary_search(a[i]);
ans = max(dp[i], ans);
int pos = i - k; //将下标为pos的元素更新至ss序列中
if(pos > 0 && ss[dp[pos]] > a[pos])
ss[dp[pos]] = a[pos];
}
printf("%d\n", ans);
}
return 0;
}
HDU 4521(dp)
最新推荐文章于 2019-08-10 17:36:51 发布