[bzoj 3594] [Scoi2014]方伯伯的玉米田

Description

方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。
这排玉米一共有N株,它们的高度参差不齐。
方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。
方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。
问能最多剩多少株玉米,来构成一排美丽的玉米。

Input

第1行包含2个整数n,K,分别表示这排玉米的数目以及最多可进行多少次操作。
第2行包含n个整数,第i个数表示这排玉米,从左到右第i株玉米的高度ai。

Output

输出1个整数,最多剩下的玉米数。

Sample Input

3 1
2 1 3

Sample Output

3

HINT

1 < N < 10000,1 < K ≤ 500,1 ≤ ai ≤5000

题目大概就是让你最多对一段区间进行加+1s(滑稽)的操作,最多k次,让你求LIS.然后我们容易发现每一次操作应当右端点要在n上,因为如果不在n上可能会减小答案,而在n上至少不会破坏原有的答案.
我们设f[i][j]表示前i个数上升j次所得到的LIS最大值.那么
f[i][j]=max{f[k][l]}+1 1<=k<i A[k]+l<=A[i]+j(保证上升后A[i]>=A[k])
f[i][j]=max{f[k][j+A[i]-A[k]]}+1 j<=i A[k]<=A[i]
由于是二维的,又是取max,我们可以用二维树状数组维护f的max.具体怎么维护呢?用树状数组记录第一维表示高度val,第二维表示操作次数.只要在这里面找一个max更新就可以了.最后循环顺序注意是倒序,原理和01背包差不多.树状数组下标不能为0,强行+1s处理.

#include <cstdio>
#include <algorithm>static const int maxm=1e6+10;int tr[6000+5][500+5],A[maxm];
int n,m,Max_val,ans;inline void read(int &in){in=0;char ch=getchar();for(;ch<'0'||ch>'9';ch=getchar());for(;ch>='0'&&ch<='9';ch=getchar())in=in*10+ch-'0';
}int lowbit(int x){return x&-x;
}void Add(int x,int y,int val){for(int i=x;i<=Max_val+m;i+=lowbit(i))for(int j=y;j<=m+1;j+=lowbit(j))tr[i][j]=std::max(tr[i][j],val);
}int Query(int x,int y){int ret=0;for(int i=x;i;i-=lowbit(i))for(int j=y;j;j-=lowbit(j))ret=std::max(tr[i][j],ret);return ret;
}int main(){read(n);read(m);for(int i=1;i<=n;i++)read(A[i]),Max_val=std::max(Max_val,A[i]);for(int i=1;i<=n;i++){for(int j=m;j>=0;j--){int tmp=Query(A[i]+j,j+1)+1;ans=std::max(ans,tmp);Add(A[i]+j,j+1,tmp);}}printf("%d\n",ans);return 0;
}

传送门

转载于:https://www.cnblogs.com/Exbilar/p/6851826.html

[bzoj 3594] [Scoi2014]方伯伯的玉米田相关推荐

  1. bzoj 3594: [Scoi2014]方伯伯的玉米田

    3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1399  Solved: 627 [Submit][ ...

  2. [SCOI2014]方伯伯的玉米田 //二维树状数组优化DP

    题目: 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩 ...

  3. bzoj3594[Scoi2014]方伯伯的玉米田

    http://www.lydsy.com/JudgeOnline/problem.php?id=3594 题目就是问你至多操作K次后的最长上升子序列. 首先,我们会得到一个结论:每次操作区间的右端点一 ...

  4. bzoj3594 [Scoi2014]方伯伯的玉米田

    题目链接 二维树状数组优化DP DP状态很容易想到:dp[i][j]表示到第i颗玉米,用了j次提升,最多保留多少: 转移: dp[i][j]=dp[k][j]+1(k<=i&&a ...

  5. [SCOI2014]方伯伯的玉米田

    题目链接 算法: 为了保证DP的正确与方便,这里先提供一个结论:每次操作都一定要拔高第n棵玉米. 以下引用NS·YJD大佬的一篇博客的证明: 首先无论操作区间在哪里,如果区间两边存在玉米,那么这些玉米 ...

  6. 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)

    传送门 题意咕咕咕 思路:直接上二维bitbitbit优化dpdpdp即可. 代码: #include<bits/stdc++.h> #define N 10005 #define K 5 ...

  7. SCOI2014 方伯伯的玉米田 题解

    可能其它还没写完的几篇随笔要搁一会儿,反正先写写题解 \(1-n\)的一个序列,值分别为\(a[1]\).\(a[2]...a[n]\),最多可进行\(K\)次操作,每次操作可以使\(l-r\)区间内 ...

  8. P3287 [SCOI2014]方伯伯的玉米田

    原题链接 数据结构优化DP 前置知识:二维树状数组 e.g.https://www.luogu.com.cn/problem/P4514 思路如下: 代码如下: #include <cstdio ...

  9. Luogu 3287 LOJ 2211 BZOJ 3594 [SCOI 2014] 方伯伯的玉米田 详解

    [SCOI 2014] 方伯伯的玉米田 题解详^详详 温馨链接 洛谷3287 LOJ2211 BZOJ3594(3倍的快乐) 题目重述 在一个序列 hhh 上你可以最多执行 KKK 次操作,每次操作可 ...

最新文章

  1. 无需数据线,在Windows电脑上就可以浏览和编辑华为的手机文件
  2. TCP传输的单个报文最大字节(MSS和MTU)
  3. java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...
  4. mysql简单语句_MySQL 简单的语句
  5. 爬虫项目之豆瓣电影排行榜前10页
  6. oracle 结果缓存,Result cache结果缓存
  7. 【转】mysql锁表解决方法
  8. 网格(UED所谓栅格化)方案生成器
  9. Visual studio 2013 连接MySQL数据库的设置。
  10. centos 7.2 安装 mysql_liunx centos7.2系统上如何安装和配置mysql数据库
  11. win7+nfs文件服务器,win7如何挂载nfs服务器
  12. x299服务器芯片,X299比X399差在哪? 两大平台产品比拼
  13. CAD小问题解决办法1
  14. MSI和MSI-X对比(五)
  15. python天气预报项目详细设计书_天气预报详细设计说明书
  16. 利用钩子技术控制进程创建
  17. Linux操作系统学习笔记3【图形界面与命令行】
  18. ros(Melodic)记录
  19. c编程十六进制数据输出格式_使用C编程语言处理十六进制值
  20. 环特生物研究团队最新论文表示,杀虫剂仲丁威或诱发神经毒性

热门文章

  1. 微信小程序入门第一天
  2. 权限管理(1):简介
  3. 红帽和Mirantis宣告结束OpenStack合作
  4. MySQL系列:数据库基本操作(1)
  5. 转:SQL Server 2005安装过程图解
  6. java blockqueue_[Java基础] Java多线程-工具篇-BlockingQueue
  7. linux wget 命令_我如何使用wget Linux命令恢复丢失的图像
  8. devops 开源工具链_使用开源工具构建DevOps管道的初学者指南
  9. 前端:HTML/04/html颜色表示,计算机进制,锚点链接,计算机编码(字符集)
  10. node 连接mongodb