51nod 1281山峰和旗子
2024-09-06 16:04:46
用一个长度为N的整数数组A,描述山峰和山谷的高度。山峰需要满足如下条件, 0 < P < N - 1 且 A[P - 1] < A[P] > A[P + 1]。
现在要在山峰上插上K个旗子,并且每个旗子之间的距离 >= K,问最多能插上多少个旗子(即求K的最大值)。两个山峰之间的距离为|P - Q|。
以上图为例,高度为:1 5 3 4 3 4 1 2 3 4 6 2。其中可以作为山峰的点为:1 3 5 10。
放2面旗子, 可以放在1 和 5。
放3面旗子, 可以放在1 5 和 10。
放4面旗子, 可以放在1 5 和 10,之后就放不下了。
所以最多可以放3面旗子。
Input
第1行:一个数N,表示数组的长度(1 <= N <= 50000)。
第2 - N + 1行:每行1个数Ai(1 <= Ai <= 10^9)。
Output
输出最多能插上多少面旗子(即求K的最大值)。
Input示例
12
1
5
3
4
3
4
1
2
3
4
6
2
Output示例
3 思路:二分+dp-------用一个f[]数组保存山峰的位置,首先如果没有山峰则直接输出0,其次距离越大代表我们要插的旗子数就越大,我们枚举旗子的个数k 找到最大的可行方案;当然直接枚举会超时,所以这里需要用二分来枚举;
对于每一个k我们需要用一次dp数组来遍历一次,dp[i]代表前i个位置能插入距离为k的旗子的个数;我们可以得到递推公式 若当前位置不可以插旗子dp[i] = dp[i-1];否则dp[i] = max(dp[i-k]+1,dp[i]);
其中i-k>0;遍历完之后若dp[n-1]>=k说明我们的k还可以继续增大,直到dp[n-1]恰好等于k的时候就停止二分,此时的k即为最大值
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
const int maxn = ;
LL n,a[maxn],f[maxn],d[maxn];;
int main()
{
ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
while(cin>>n){
int flag = ;
for(int i=;i<n;i++)cin>>a[i];
for(int i=;i<n-;i++)
if(a[i]>a[i-]&&a[i]>a[i+]){
f[i] = ;flag++;
}
if(!flag){
cout<<""<<endl;
continue;
}
int l=,r=n,ans=;
while(l<r){
int k = (l+r)>>;
for(int i=;i<n;i++)
d[i] = f[i];
for(int i=;i<n;i++){
if(!f[i])d[i]=d[i-];
else if(i-k>) d[i] = max(d[i-k]+,d[i]);
}
if(d[n-]>=k){
ans = k;
l = k+;
}else r = k;
}
cout<<ans<<endl;
}
return ;
}
最新文章
- 异步Socket 客户端部分
- cmd执行SQL语句
- 访问本地json文件因跨域导致的问题
- SLP的模块结构
- html-tab page
- 项目管理工具之Git使用说明
- java12 - 7 排序的案例
- Android app主线程UI更新间歇性崩溃的问题
- [ActionScript 3.0] AS3 时间格式化方法
- 斯坦福数据挖掘Introduction
- DSC配置
- WPF中TextBox限制输入不起作用的问题
- HMM的学习笔记1:前向算法
- 搜狗2015校园招聘javaproject师面经
- [HNOI2008]越狱
- php之常用扩展总结
- [蓝点zigBee] CC2530 实用教程总览
- 安装Docker,Asp.net core
- 030 RDD Join中宽依赖与窄依赖的判断
- 我所理解的Delphi中的数组类型
热门文章
- pycharm 2017 序列号失效问题解决(2016-2017版本都有效)
- Tomcat的原理
- oracle限制一个用户空闲时间
- 阿里云发布Apsara SA系列混合云存储阵列
- chrome://inspect调试html页面空白,DOM无法加载的解决方案
- 【Leetcode链表】两两交换链表中的节点(24)
- hdu 1561【树形dp+01背包】
- LinkedHashMap.get(";key";)
- 【批量添加】-拼接sql字符串 标签: 批量添加 2015-12-13 17:49 2070人阅读 评论(33)
- vs code python保存时pylint提示";Unable to import &#39;flask&#39;";