关于此题的不同解法正确性
查看原帖
关于此题的不同解法正确性
450743
XOOR楼主2024/5/8 17:20

先考虑从左往右跳

dpi,jdp_{i,j} 表示由 xjx_j 位置到达 xix_i 位 dpi,j=max⁡xi−xj≥xj−xk,k<j,j<i{dpj,k}+pidp_{i,j}=\max_{x_i-x_j\ge x_j-x_k,k<j,j<i}\{dp_{j,k}\}+p_i dpi,j=max⁡xi≥2×xj−xk,k<j<i{dpj,k}+pidp_{i,j}=\max_{x_i\ge 2\times x_j-x_k,k<j<i}\{dp_{j,k}\}+p_i

由此固定 ii ,每次 jj 增大都影响 kk 的范围,进行单调队列优化维护 dpj,kdp_{j,k} 最大值,最后答案 max⁡i=1nmax⁡j=1idpi,j\max_{i=1}^n\max_{j=1}^i dp_{i,j} 正确吗?

不知道是正确性有问题还是我写挂了

for(int i=1;i<=n;i++){
		int k=1;
		for(int j=1;j<i;j++){
			for( ;k<j;k++){
				while(q.size() && dp[j][q.back()]<=dp[j][k]) 
					q.pop_back();
				q.push_back(k);
			}
			while(q.size() && x[i]<2*x[j]-x[q.front()]) q.pop_front();
			if(q.size()) dp[i][j]=dp[j][q.front()]+a[i];
		}
	}
2024/5/8 17:20
加载中...