首页 > 其他分享 >CodeForces 814E An unavoidable detour for home

CodeForces 814E An unavoidable detour for home

时间:2024-01-17 22:13:05浏览次数:32  
标签:typedef ll unavoidable long maxn home define 814E mod

洛谷传送门

CF 传送门

考虑给图分层,一层的点一一对应上一层的一些点。设 \(f_{i, j}\) 为考虑了前 \(i\) 个点,最后一层有 \(j\) 个点,除了最后一层点的其他点度数限制已经满足的方案数。

转移系数是 \(g_{i, j, k}\) 表示这一层有 \(i\) 个点,上一层有 \(j\) 个 \(2\) 度点,\(k\) 个 \(3\) 度点(实际上因为上一层已经和上上层连边所以是 \(1, 2\) 度点)。这个的递推是容易的。

时间复杂度就是 \(O(n^3)\)。

code
// Problem: E. An unavoidable detour for home
// Contest: Codeforces - Codeforces Round 418 (Div. 2)
// URL: https://codeforces.com/problemset/problem/814/E
// Memory Limit: 256 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 55;
const ll mod = 1000000007;
const ll inv2 = (mod + 1) / 2;

inline ll qpow(ll b, ll p) {
	ll res = 1;
	while (p) {
		if (p & 1) {
			res = res * b % mod;
		}
		b = b * b % mod;
		p >>= 1;
	}
	return res;
}

ll n, a[maxn], fac[maxn], ifac[maxn], f[maxn][maxn], g[maxn][maxn][maxn];

inline ll C(ll n, ll m) {
	if (n < m || n < 0 || m < 0) {
		return 0;
	} else {
		return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
	}
}

void solve() {
	scanf("%lld", &n);
	for (int i = 1; i <= n; ++i) {
		scanf("%lld", &a[i]);
	}
	fac[0] = 1;
	for (int i = 1; i <= n; ++i) {
		fac[i] = fac[i - 1] * i % mod;
	}
	ifac[n] = qpow(fac[n], mod - 2);
	for (int i = n - 1; ~i; --i) {
		ifac[i] = ifac[i + 1] * (i + 1) % mod;
	}
	g[0][0][0] = 1;
	for (int i = 3; i <= n; ++i) {
		for (int j = 3; j <= i; ++j) {
			g[0][0][i] = (g[0][0][i] + g[0][0][i - j] * C(i - 1, j - 1) % mod * fac[j - 1] % mod * inv2) % mod;
		}
	}
	for (int i = 1; i <= n; ++i) {
		for (int j = 0; j <= n; ++j) {
			if (i >= 2) {
				g[0][i][j] = g[0][i - 2][j] * (i - 1) % mod;
			}
			if (j) {
				g[0][i][j] = (g[0][i][j] + g[0][i][j - 1] * j) % mod;
			}
		}
	}
	for (int i = 1; i <= n; ++i) {
		for (int k = 0; k <= n; ++k) {
			for (int j = 0; j <= n; ++j) {
				if (j) {
					g[i][j][k] = g[i - 1][j - 1][k] * j % mod;
				}
				if (k) {
					g[i][j][k] = (g[i][j][k] + g[i - 1][j + 1][k - 1] * k) % mod;
				}
			}
		}
	}
	f[a[1] + 1][a[1]] = 1;
	for (int i = a[1] + 2; i <= n; ++i) {
		for (int j = 1; j < i; ++j) {
			int c2 = 0, c3 = 0;
			for (int k = 1; j + k < i; ++k) {
				c2 += (a[i - j - k + 1] == 2);
				c3 += (a[i - j - k + 1] == 3);
				f[i][j] = (f[i][j] + f[i - j][k] * g[j][c2][c3]) % mod;
			}
		}
	}
	int c2 = 0, c3 = 0;
	ll ans = 0;
	for (int i = 1; i < n; ++i) {
		c2 += (a[n - i + 1] == 2);
		c3 += (a[n - i + 1] == 3);
		ans = (ans + f[n][i] * g[0][c2][c3]) % mod;
	}
	printf("%lld\n", ans);
}

int main() {
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,ll,unavoidable,long,maxn,home,define,814E,mod
From: https://www.cnblogs.com/zltzlt-blog/p/17971289

相关文章

  • Homebrew
    1.介绍Homebrew是一款包管理工具,目前支持macOS和Linux系统。主要有四个部分组成:brew、homebrew-core、homebrew-cask、homebrew-bottles。2.安装2.1执行安装脚本执行/bin/zsh-c"$(curl-fsSLhttps://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)",镜像选......
  • The JAVA_HOME environment variable is not defined correctly,解决
    k8s集成jenkins,在进行子工程mvncleaninstall过程中报截图中错误,经过排除是之前在系统管理->系统配置中,添加的JAVA_HOME环境变量不对,可能目前我使用的jenkins是通过k8sPod生成的,并不是直接在主机上安装的,所以此处填的JAVA_HOMEjenkins识别不到,所以报错.取消后不再报错.......
  • 人间烟火气,最抚凡人心——Only&Home多功能电煮锅
    寒冷的冬季,每当寒风瑟瑟,我们都渴望一份温暖,总想吃些热乎乎的东西,暖心又暖胃。此时,一锅热腾腾的火锅,仿佛是冬日里的暖阳,瞬间驱散了寒冷,让我们沉醉在家的温馨与欢聚的喜悦中,看着锅里咕嘟咕嘟冒泡,热气与香气扑面而来那一刻,真的太幸福啦!为了能在这个冬日里拥有更多美食的乐......
  • 国标GB28181安防监控LiteCVR视频平台无法接入Ehome5.0的原因排查
    随着人工智能技术的迅速发展,未来的安防视频技术将更加智能化。通过深度学习和图像识别算法,安防摄像头可以自动识别异常行为、人脸识别、车辆识别等,从而提供更智能、自动化的安全监控。 用户在现场使用LiteCVR平台接入ehome5.0,显示无法接入。针对这个情况我们来好好分析一下。视......
  • 初中英语优秀范文100篇-036Eating out or Dining at Home-出去吃还是在家吃
    PDF格式公众号回复关键字:SHCZFW036记忆树1Eatingoutisveryconvenientbecausenoonehastocook.翻译外出就餐非常方便,因为没有人需要做饭。简化记忆方便句子结构1"Eatingout":这是一个动名词短语,用来表示行为。"eating"(吃)是动词,用作现在分词形式,用来构成动名......
  • centos配置JAVA_HOME
    下载jdk从华为云镜像下载openjdk17curl-oopenjdk-17_linux-x64_bin.tar.gzhttps://mirrors.huaweicloud.com/openjdk/17/openjdk-17_linux-x64_bin.tar.gz%Total%Received%XferdAverageSpeedTimeTimeTimeCurrent......
  • 国标GB28181安防监控LiteCVR视频平台无法接入Ehome5.0的原因排查
    随着人工智能技术的迅速发展,未来的安防视频技术将更加智能化。通过深度学习和图像识别算法,安防摄像头可以自动识别异常行为、人脸识别、车辆识别等,从而提供更智能、自动化的安全监控。用户在现场使用LiteCVR平台接入ehome5.0,显示无法接入。针对这个情况我们来好好分析一下。......
  • 通过Solopace.Gem 无需公网IP远程访问智能家庭(HomeAssistant)
    Solopace.Gem可以便捷地让你再任何地方访问家中的HomeAssistant,这为个人用户提供了更便利的控制家庭自动化设备的方式。以下是一份教程,展示如何通过Solopace.Gem访问HomeAssistant:---如何通过Solopace.Gem访问HomeAssistant步骤1:安装Solopace.Gem1.注册与安装:访问Solopace.Gem......
  • 真机调试 Flutter 报错:Lookup failed: title in @getters in MyHomePage in package:f
    发生缘由学习Flutter更改lib目录下面的main.dart文件之后真机调试运行flutterrun报错:1#小组件库异常2══╡EXCEPTIONCAUGHTBYWIDGETSLIBRARY╞═══════════════════════════════════════════════════......
  • Home-图片懒加载指令实现
    场景和指令用法场景:某些网站首页通常会很长,用户不一定能访问到页面靠下面的图片,这类图片通过懒加载优化手段可以做到,只有进入视口区域才发送图片请求指令用法:<imgv-img-lazy="item.picture"/>在图片img身上绑定指令,该图片只有正式进入到视口区域时才会发送图片网络请求实现......