首页 > 其他分享 >P3287 [SCOI2014] 方伯伯的玉米田

P3287 [SCOI2014] 方伯伯的玉米田

时间:2024-11-11 18:41:39浏览次数:1  
标签:伯伯 int P3287 玉米田 两维 SCOI2014

P3287 [SCOI2014] 方伯伯的玉米田

感觉其实也不难。

我们必然知道选择加区间的右端点是 \(n\),因为如果只选中间的话会与后面相差开,不如直接选上右,因为有两个变量,位置与操作次数,所有我们就设状态为 \(f_{x,k}\) 为我们 \(x\) 为左端点被加 \(k\) 次的最长不下降子序列,此时我们的树状数组也要开两维同样记录,查找时也两维查找。

#include <bits/stdc++.h>
#define int long long
#define ls p<<1
#define rs p<<1|1 
#define re register 
const int N=1e4+10;
const int mod=1e9+7;
using namespace std;
int n,k;
int a[N];
int f[N][505];
int t[N][505];

int lb(int x){
	return x&-x;
}
void change(int x,int y,int z){
	for(int i=x;i<=5500;i+=lb(i)){
		for(int j=y;j<=k+1;j+=lb(j)){
			t[i][j]=max(t[i][j],z);
		}
	}
}
int query(int x,int y){
	int ans=0;
	for(int i=x;i;i-=lb(i)){
		for(int j=y;j;j-=lb(j)){
			ans=max(ans,t[i][j]);
		}
	}
	return ans;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=k;j>=0;j--){
			f[i][j]=query(a[i]+j,j+1)+1;
			change(a[i]+j,j+1,f[i][j]);
		} 
	}
	cout<<query(5500,k+1);
	return 0; 
}

标签:伯伯,int,P3287,玉米田,两维,SCOI2014
From: https://www.cnblogs.com/sadlin/p/18540336

相关文章

  • [SCOI2014] 方伯伯的玉米田(树状数组优化 DP)
     loj传送门https://loj.ac/p/2211洛谷题目传送门https://www.luogu.com.cn/problem/P3287解题思路首先,我们可以贪心地思考一下:对于每一次区间的加一操作,右端点是在末尾会比右端点在中间的情况更好。因为,当你的右端点在序列中间的时候,相对之下,后面的数就更小了一些,这样是......
  • [Ynoi2017] 由乃的玉米田
    题目链接:[Ynoi2017]由乃的玉米田弱化版:小清新人渣的本愿这两道题都是看会不会用bitset,bitset大胜利减操作:用一个bitset\(vis1\)记录一个数是否出现,如果有就是\((vis1\And(vis>>x)).count()\ge1\),其实就是看是否有数\(a\)和数\(a+x\)同时出现加操作:同减操......
  • [SCOI2014] 方伯伯的玉米田 题解
    对于每次修改的区间以及其左边序列和右边序列,共三种情况:1.区间内比两侧低的还是低2.区间内比两侧低的变得比两侧高了3.区间内比两侧高的还是高那么现在又面临一个问题:在区间内变化后,对答案,即最长不下降子序列有什么影响。对区间左边:可能会使其最长不下降子序列增长对区间......
  • 51nod-3928方伯伯的玉米田
    https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338https://class.51nod.com/Html/Textbook/Problem.html#problemId=3928&textbookChapterId=725保证右端点为\(n\)是因为如果不是这样操作,可能导致后面的数大小关系发生变化,而如果保证了......
  • 327. 玉米田
    //327.玉米田.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>usingnamespacestd;/*https://www.acwing.com/problem/content/329/农夫约翰的土地由M×N个小方格组成,现在他要在土地里种植玉米。非常遗憾,部分土地是不育的,无......
  • luoguP3287 [SCOI2014] 方伯伯的玉米田
    题目描述方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。这排玉米一共有NN株,它们的高度参差不齐。方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。方伯伯可以选择一个区间,把这......
  • P3287 [SCOI2014] 方伯伯的玉米田
    首先每次选择的区间结尾都可以换成\(n\),仍然保持单调不降,我们就按这个策略拔高玉米。令\(f_{i,j}\)表示\(1\simi\)这段前缀进行了\(j\)次操作,第\(i\)株玉米不被拔掉,所能剩下最多的玉米数量:\[f_{i,j}=\max\{f_{p,q}|p<i,q<j,a_p+q\leqa_i+j\}+1\]枚举\(i\),剩下两个......
  • [SCOI2014] 方伯伯的OJ 解题报告
    已经不记得平衡树的样子了。Statement给定一个\(1\simn\)的序列,你有如下几个操作:改变一个人的编号将一个人放在序列开头将一个人放在序列结尾查询排名为\(k\)......
  • [SCOI2014]方伯伯的玉米田题解
    [SCOI2014]方伯伯的玉米田题目描述方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。这排玉米一共有\(N\)株,它们的高度参差不齐。方伯伯认为单调不下降序......
  • Luogu P3286 [SCOI2014]方伯伯的商场之旅
    题意方伯伯有一天去参加一个商场举办的游戏。商场派了一些工作人员排成一行。每个人面前有几堆石子。说来也巧,位置在\(i\)的人面前的第\(j\)堆的石子的数量,刚好是\(......