您的位置:首页 > 其它

HDU 4521(dp)

2015-11-27 16:43 375 查看
//  类似于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
;
int ss
;
int a
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: