首页 > 其他分享 >Let bygones be bygones

Let bygones be bygones

时间:2024-05-02 21:44:05浏览次数:21  
标签:return int len ++ bygones Let ans dp

Let bygones be bygones.

Oh, I have.

欢乐 dp 场。总之我们通过神秘方法,一个像样的正解都没有写,获得了三位数的好成绩。

六出祁山

一个有脑子就会写的暴力 dp,定义 \(f_{i, j}\) 表示处理到第 \(i\) 个,高度改为 \(j\)。有 \(f_{i, j} = f_{i - 1, k} + | h_i - j| (|k - j| \leq d)\)。然后这样是 \(O(n d^ 2)\) 的,考虑优化。那么显然只能优化这个状态数,其它的目前还优化不了。然后就有一个非常离谱的优化,感性理解一下,相邻差都不大于 \(d\),还在 \(h\) 元素的基础上修改,那么是不是最优状态可以是 \(h_i + kd, k \in \mathbb{Z}\) 呢?

然后状态数从 \(d\) 变到了 \(n ^ 2\)。时间复杂度 \(O(n ^ 5)\)。重新看原来的 dp 柿子,\(j\) 固定,\(k\) 显然也固定,那么 \(j\) 每次循环都增加,只需要用滑动窗口维护 \(k\) 就好了。时间复杂度 \(O(n ^ 3)\)。甚至可以 set。

namespace liuzimingc {
const int N = 305, M = 9e4 + 5, INF = 1e9;
#define endl '\n'
#define int long long

int n, d, h[N], v, a[N], ans, q[M];
int f[N][M];
vector<int> lsh;

int get(int x) {
	return lower_bound(lsh.begin(), lsh.end(), x) - lsh.begin();
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	cin >> n >> d;
	for (int i = 1; i <= n; i++) cin >> h[i], v = max(v, h[i]);
	if (abs(h[1] - h[n]) > (n - 1) * d) return cout << -1 << endl, 0;
	for (int i = 1; i <= n; i++)
		for (int j = -n; j <= n; j++) {
			int x = h[i] + j * d;
			if (x >= 0 && x <= v) lsh.push_back(x);
		}
	sort(lsh.begin(), lsh.end());
	lsh.resize(unique(lsh.begin(), lsh.end()) - lsh.begin());
	memset(f, 0x3f, sizeof(f));
	f[1][get(h[1])] = 0;
	for (int i = 2; i <= n; i++) {
		int head = 1, tail = 0, r = 0;
		for (int j = 0; j < lsh.size(); j++) {
			while (head <= tail && lsh[q[head]] < lsh[j] - d) head++;
			while (r < lsh.size() && lsh[r] <= lsh[j] + d) {
				while (head <= tail && f[i - 1][q[tail]] > f[i - 1][r]) tail--;
				q[++tail] = r++;
			}
			f[i][j] = f[i - 1][q[head]] + abs(lsh[j] - h[i]);
		}
	}
	cout << f[n][get(h[n])] << endl;
	return 0;
}
#undef int
} // namespace liuzimingc

水淹七军

糊里糊涂,总之用了一个完全不知道的 Mirsky(Dilworth)定理:\(S\) 的最长链长度等于最小的反链覆盖数。

然后转换成这个,然后就开始分层 dp 了。是的我是 C 的,现在都没懂,我骄傲

标签:return,int,len,++,bygones,Let,ans,dp
From: https://www.cnblogs.com/liuzimingc/p/18170611/bygones

相关文章

  • Servlet中的Config和Context
    ServletConfig在servlet对象创建之后创建,每有一个servlet对象就有对应的servletConfig对象。ServletContext在Tomcat服务器加载Web项目后由Tomcat创建,一个web项目在Tomcat的启动运行中只有一个Context对象。ServletContext对象:ServletContext是一个全局对象,代表整个Web应......
  • servlet的生命周期及线程问题
    1.servlet对象的产生,是在第一次使用servlet的时候由Tomcat创建,由Tomcat调用构造方法创建的对象。之后再使用这个servlet就直接使用创建好的对象。servlet在Tomcat服务器中是单实例。2.init()在创建servlet后只调用一次。可以初始化一些公用的函数。通常我们直接使用父类的init就......
  • servlet实现注册功能
    1.servlet://创建一个hashmap数组来存放注册的用户名和密码publicstaticHashMap<String,String>user=newHashMap<>();@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{doPost(request,response);}@Ov......
  • Lettuce 实战之连接超时问题
    问题使用lettuce作为redis连接池,在访问redis时,偶尔会抛出RedisCommandTimeoutException,但隔一会儿又好了。为什么lettuce有自动重连机制,却还是会出现连接超时的问题?为什么lettuce在连接断掉后,没有立即重连,而是需要等待十多分钟才重新连接?在lettuceclient和redisserver之间创......
  • Windows Server 下 IIS 申请部署 Let's Encrypt 证书实现 免费 HTTPS
    certbot命令行搞了半天一直失败找到个工具Certify简单方便1、首先下载Certify下载到服务器上并安装。下载地址:https://certifytheweb.com/2、第一次启动程序时会弹出对话框让我们填写个邮箱地址,等证书快要过期的时候我们会收到续订证书的提醒邮件。这里我们填上常用的ema......
  • [转帖]WEB请求处理三:Servlet容器请求处理
    https://www.jianshu.com/p/571c474279af 0系列目录#WEB请求处理WEB请求处理一:浏览器请求发起处理WEB请求处理二:Nginx请求反向代理本篇文章将给大家讲述Servlet容器中请求处理的过程,在给本篇文章起标题时,一直在“应用服务器”与“Servlet容器”这两者之间......
  • 数据表删除DROP TRUNCATE DELETE区别
    总的来说,DROP用于删除整个数据库对象(表结构和数据全部删除),DELETE用于删除表中的数据,而TRUNCATE也是删除表中的数据,但比DELETE更快,且无法指定条件删除。根据需求,选择适当的命令来删除数据或对象。 DROP:1.DROP用于删除数据库对象,例如表(table)、索引(index)、视图(view)等。2......
  • jsp和servlet写的增删改查
    JavaEE架构程序设计实验作业一、实验项目功能完成了项目的登录和注册学生信息管理的增删改查学生选课信息的增删改查学生成绩管理的增删改查  二、实验过程实验过程还是比较曲折的,因为之前没有写过完整的Servlet程序,不知道如何将表单提交到Servlet,一开始写的都......
  • CompletableFuture 使用详解
    1.runAsync、supplyAsync:用于异步执行任务。//runAsync:没有返回值CompletableFuture<Void>future1=CompletableFuture.runAsync(()->{System.out.println("Hello");},executor);//supplyAsync:有返回值CompletableFuture<String>future2=Compl......
  • UE4之StaticMesh和SkeletalMesh类关系图
    StaticMesh类关系图StaticMesh渲染数据结构 SkeletalMesh类关系图 USkinnedMeshComponent::CreateRenderState_Concurrent函数voidUSkinnedMeshComponent::CreateRenderState_Concurrent(FRegisterComponentContext*Context){LLM_SCOPE(ELLMTag::SkeletalMesh......