首页 > 其他分享 >【DP】#1109. [POI2007]堆积木Klo

【DP】#1109. [POI2007]堆积木Klo

时间:2022-08-19 19:15:34浏览次数:79  
标签:ch int POI2007 Klo leq using mx DP define

https://darkbzoj.cc/problem/1109

分析

考虑状态表示原来在位置 \(i\) 的数有贡献(也就是说在结束操作后它的位置 \(i'\) 满足 \(i'= w_i\))的最大值为 \(f[i]\)。

那么我们有转移方程 \(f[i] = \max f[j] + 1\),其中 \((j<i, ~ w_j<w_i, ~ w_i-w_j\leq i-j)\)。

考虑优化转移:

\(w_i-w_j \leq i-j\) 也就是 \(j-w_j \leq i-w_i\)。

可以发现 \(w_j<w_i, ~ j-w_j \leq i-w_i\) 同时满足的时候第一个约束也必然满足,所以只需要考虑这两个约束。

因为 \(j-w_j \leq i-w_i\) 有等号,为了消除等号的影响,考虑根据 \(j-w_j < i-w_i\) 为第一关键字,下标为第二关键字进行排序。

排序后使用后缀数组维护 \(w_j<w_i\) 的贡献即可。

#include<bits/stdc++.h>
using namespace std;
 
#define debug(x) cerr << #x << ": " << (x) << endl
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define pb push_back
#define all(x) (x).begin(), (x).end()
 
#define x first
#define y second
using pii = pair<int, int>;
using ll = long long;
 
inline void read(int &x){
    int s=0; x=1;
    char ch=getchar();
    while(ch<'0' || ch>'9') {if(ch=='-')x=-1;ch=getchar();}
    while(ch>='0' && ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
    x*=s;
}

const int N=1e6+5;

int n;

struct Node{
	int id, w;
	
	bool operator < (const Node &o)const{
		return id-w==o.id-o.w? id<o.id: id-w<o.id-o.w;
	}
}w[N];

int tr[N];

int lowbit(int x){
	return x&-x;
}

void upd(int x, int k){
	for(; x<N; x+=lowbit(x)) tr[x]=max(tr[x], k);
}

int query(int x){
	int res=0;
	for(; x; x-=lowbit(x)) res=max(res, tr[x]);
	return res;
}

signed main(){
	cin>>n;
	rep(i,1,n){
		int x; read(x);
		w[i]={i, x};
	}
	sort(w+1, w+1+n);
	
	int res=0;
	rep(i,1,n){
		if(w[i].w>w[i].id) continue;
		int mx=query(w[i].w-1);
		res=max(res, mx+1);
		upd(w[i].w, mx+1);
	}
	cout<<res<<endl;
	
	return 0;
}

标签:ch,int,POI2007,Klo,leq,using,mx,DP,define
From: https://www.cnblogs.com/Tenshi/p/16603068.html

相关文章

  • 如何使用 K3s 部署 Wordpress
    为什么使用K3s部署Wordpress很多朋友使用Docker或者宝塔来部署Wordpress,如果只有一台服务器,这样搞没问题。不过我建议使用K3s部署Wordpress,因为这样才能享受......
  • Dp的优化
    Dp的优化单调栈优化DpTheGreatWallII题意:给你n个点,问分成1∼n组,每一组的代价就是这一组中的最大值,问每一种情况的最小权值和。思路:把状态定义为dij表示......
  • 千兆以太网_发送模块设计_udp_rgmii_tx
    功能:在FPGA开发板上,用户数据存于FIFO,经过UDP,IP,MAC封装,通过RGMII接口发送出去。完整的以太网应该包括收发功能,这里介绍发送模块。实现:序列机过程:发送顺序:  MAC帧头—......
  • 【kuangbin】专题十二 基础DP1
    【kuangbin】专题十二基础DP1https://vjudge.net/contest/68966#overview前几周写了来着,忘更了我饿了,先放代码,吃完再来A-MaxSumPlusPlus#include<bits/stdc++.......
  • 压缩空间尝试使用只与前一个状态有关的dp dp[2][N]
    之后每次迭代t^1使得0->11->0这里有n个世界,每个世界都有m个点。在i个世界中,你最多可以选择一条边,从u点移动到v点(可以选择不移动)。随后进入到第i+1个世界......
  • 扑克牌(期望DP)
    题意Rainbow把一副扑克牌(\(54\)张)随机洗开,倒扣着放成一摞。然后Admin从上往下依次翻开每张牌,每翻开一张黑桃、红桃、梅花或者方块,就把它放到对应花色的堆里去。Rainb......
  • 【DP 记录】AcWing 734. 能量石
    传送门给你几个物品,每种选一次,求最大价值,首先想到01背包,但是我们遇到了一个问题:普通的01背包在选择物品时是不讲求顺序的,但在这道题中,物品的选择是有顺序的(即对最优......
  • 一种关于低代码平台(LCDP)建设实践与设计思路
    简介: 作者在负责菜鸟商业中心CRM系统开发过程中发现有一个痛点:业务线很多,每个业务线对同一个页面都有个性化布局和不同的字段需求,而他所在的团队就3个人,那么在资源有限的......
  • 区间DP の 题(内含 最长回文串,石子合并,删除字符串,乘积最大,释放囚犯)
    乘积最大  由于题目给定的是m,需要分解成m+1部分的乘积,不难想到乘号刚好是m个,那么该题就转化成了m个乘号的插入方式。  最优子结构分析:    设数字字符串为a1a......
  • pg_bulkload 数据加载使用及示例
    1.pg_bulkload概述1.1pg_bulkload介绍pg_bulkload是一种用于PostgreSQL的高速数据加载工具,相比copy命令。最大的优势就是速度。优势在让我们跳过sharedbuffer,walbu......