首页 > 其他分享 >插头 dp / 轮廓线 dp / 连通性 dp 做题笔记

插头 dp / 轮廓线 dp / 连通性 dp 做题笔记

时间:2024-10-20 19:45:24浏览次数:7  
标签:插头 连通性 int pos bit now dp

牢游看见我正在做插头 dp,于是给我了一个 Claris 的连通性 dp 的 pdf。

好了,现在又有可以软性颓废的事可干了。

好多题目在其他平台都找不到了,这时候我们 becoder 的优越性就体现出来了!(这就是到处搬题的好处)所以大部分题目链接都会放 becoder 的链接。

什么?你不知道 becoder 或者没有 becoder 账号?亲爱的快快点我去进行注册吧

(注意到这是一个推广链接,燕国的地图还是太短了。但是这个 72 小时刷新一次是不是也在变相催更我自己啊。)

后面考虑补一个插头 dp 的学习笔记?


插头 dp 学习笔记

咕咕咕


插头 dp 做题笔记

Becoder# 10030. Ants

如果做过模板题了的话这道题就很轻松了。

从图论的角度考虑,最后每个格子仍然有麻衣蚂蚁的话那么每个格子都会恰好有一个入度,所以会形成若干个有向回路。

回路覆盖计数是经典的插头 dp,而且这道题还没要求是一条回路!那就更简单了,定义三种插头:\(0\) 表示无插头,\(1\) 表示出度插头,\(2\) 表示入度插头:

image

分以下几种情况讨论:

  1. 右插头和下插头都是空插头:此时直接新建两个插头,一个入度插头和一个出度插头,因为每个格子都必须被回路覆盖到。
  2. 有一个空插头,另一个是非空插头:可以继续按照原来的方向延续这个插头,或是使其转向(右插头变下插头,下插头变右插头),注意插头的类型不能改变。
  3. 两个都是非空插头,直接合并,注意要判断两个插头是否是一个入度插头一个出度插头,如果不是的话需要忽略掉。

roll 的时候要把行末还有右插头的状态舍弃掉。

代码还是轻松的:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int mod = 299987;
int n, last = 1, now, bit, lx, dx, cnt[2], head[mod], nxt[200005], q[2][200005];
ll v, val[2][200005];
void push(int bit, ll v) {
	static int r, pos;
	r = bit % mod, pos = head[r];
	while(pos) {
		if(q[now][pos] == bit) {
			val[now][pos] += v;
			return;
		}
		pos = nxt[pos];
	}
	nxt[++cnt[now]] = head[r];
	head[r] = cnt[now];
	tie(q[now][cnt[now]], val[now][cnt[now]]) = tie(bit, v);
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	cin >> n;
	push(0, 1);
	for(int i = 1; i <= n; ++i) {
		for(int j = 1; j <= cnt[now]; ++j) {
			if(q[now][j] >> (n << 1)) val[now][j] = 0;
			q[now][j] <<= 2;
		}
		for(int j = 1; j <= n; ++j) {
			swap(last, now);
			fill(head, head + mod, 0);
			cnt[now] = 0;
			for(int k = 1; k <= cnt[last]; ++k) {
				tie(bit, v) = tie(q[last][k], val[last][k]);
				if(!v) continue;
				lx = (bit >> ((j - 1) << 1)) & 3, dx = (bit >> (j << 1)) & 3;
				if(!lx && !dx) {
					push(bit ^ (1 << ((j - 1) << 1)) ^ (2 << (j << 1)), v);
					push(bit ^ (2 << ((j - 1) << 1)) ^ (1 << (j << 1)), v);
				}
				else if(lx && !dx) {
					push(bit, v);
					push(bit ^ (lx << ((j - 1) << 1)) ^ (lx << (j << 1)), v);
				}
				else if(!lx && dx) {
					push(bit, v);
					push(bit ^ (dx << ((j - 1) << 1)) ^ (dx << (j << 1)), v);
				}
				else if((lx ^ dx) == 3) {
					push(bit ^ (lx << ((j - 1) << 1)) ^ (dx << (j << 1)), v);
				}
			}
		}
	}
	for(int i = 1; i <= cnt[now]; ++i) {
		if(!q[now][i]) {
			cout << val[now][i];
			return 0;
		}
	}
	cout << "0";
	return 0;
}

标签:插头,连通性,int,pos,bit,now,dp
From: https://www.cnblogs.com/A-box-of-yogurt/p/18487712

相关文章

  • 新高一暑假第一期集训恢复性训练【DP版块】(补)
    新高一暑假第一期集训恢复性训练【DP版块】(补)A.[CEOI2017]MUSEUM树形dp。设\(f_{i,j},g_{i,j}\)表示以\(i\)为根的子树中,访问了\(j\)个点,回到\(i\)和不必回到\(i\)的代价。转移的时候做类似于背包一样的东西。时间复杂度\(\Theta(n^2)\)。B.[ABC207F]Tr......
  • 详解UDP-TCP网络编程
    目录UDP数据报套接字编程API代码示例--(回显)单个客户端UdpEchoServerUdpEchoClientUdpDictServer(词典)将服务端程序部署到云服务器上TCP流套接字编程API长短链接代码示例--(回显)多个客户端TcpEchoServerTcpEchoClientUDP数据报套接字编程APIDatagramSoc......
  • UDP协议和TCP协议
    UDP协议:        是一种无连接的、简单的传输层通信协议,它在IP协议(网络层)之上提供服务。特点:无连接:在数据传输前,发送方和接收方之间不需要建立连接,可以直接发送数据。简单:UDP协议头只有8个字节,比TCP协议头简单,因此开销较小。不保证可靠性:UDP不提供数据传输的可......
  • 强化学习算法笔记之【DDPG算法】
    强化学习笔记之【DDPG算法】目录强化学习笔记之【DDPG算法】前言:原论文伪代码DDPG中的四个网络代码核心更新公式前言:本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN就是因为DDPG引入了Actor-Critic模型,所以比DQN多了两个网络,网络名字功能变了一下,其它的就是软更新之......
  • udp协议进行传输
    一、单个用户的连接1.发送端importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;/*1:建立udp的socket服务2:将要发送的数据封装成数据包3:通过udp的socket服务,将数据包发送出4:关闭资源*/publicclassS......
  • debian软件卸载|deb包卸载|dpkg命令
    软件包卸载-知道要卸载的软件包名称sudoapt-getremovepackage_name或者sudoapt-get--purgeremovepackagepackage_name-不知道要卸载的软件包名称首先使用dpkg查询软件名称dpkg--get-selections|grep"软件名称关键字"然后在删除软件sudoapt-get--purgere......
  • GDPC-CSA::CTF一轮web题目write up-T2 ez http
    首先来看题目先不鸟提示,进去页面逛逛,F12一下,看到如下内容回头来看提示,robots.txt是网页用来告知爬虫允许和禁止访问文件的君子协议,由题我们决定先打开/robots.txt查看一下爬虫被禁止访问哪些文件,其中说不定会有线索如果对robots.txt还不了解的可以看看这里在网站地址框输入......
  • TCP-UDP-Socket调试工具以及使用教程(亲测好用!)
    前言TCP-UDP老程序都不陌生吧,面试常问。所以在网络编程与网络应用开发的过程中,调试是一个至关重要的环节,它帮助开发者确保数据能够准确无误地在不同节点之间传输。尤其当涉及到TCP/IP、UDP等底层网络通信协议时,面对复杂的连接建立、数据流控制及错误处理等问题,拥有一款强大且专业......
  • ReadPilot: 革新网页阅读体验的AI助手
    ReadPilot:让网页阅读更高效、更智能在这个信息爆炸的时代,我们每天都面临着大量的网页内容需要阅读和处理。如何在有限的时间内快速获取关键信息,成为了许多人面临的挑战。ReadPilot应运而生,它是一款革新性的AI网页阅读助手,旨在帮助用户更高效地获取和理解网页内容。ReadPil......
  • DeviceNet转Profibus DP总线协议转换网关
    一,设备主要功能捷米特JM-DP-DNT网关实现DeviceNet从站设备接入到ProfibusDP网络;也可作为DeviceNet从站,将DeviceNet主站设备接入到Profibus网络。应用广泛:捷米特JM-DP-DNT广泛应用于支持DeviceNet接口的罗克罗尔,欧姆龙,基恩士PLC等主站控制器等等。DeviceNet从站转ProfibusD......