AtCoder Beginner Contest 372 F题(dp)

题目链接

AtCoder Beginner Contest 372 F

思路

对于这种计数问题,我们很容易想到dp。

我们假设 d p i j dpij dpij表示第 i i i次移动,到第 j j j号节点的方案数,则状态转移方程为:

d p v j = d p v − 1 j − 1 + d p u j − 1 dpvj = dpv-1j-1 + dpuj-1 dpvj=dpv−1j−1+dpuj−1

显然,无论是时间复杂度还是空间复杂度都无法接受。

我们发现, m m m最大不会超过50,因此我们可以考虑以 m m m为突破口对dp进行优化。

我们发现,状态转移方程的前半部分实际上是对 d p dp dp数组进行循环移动

因为 d p v − 1 j − 1 dpv-1j-1 dpv−1j−1实际上就是 d p dp dp数组循环移动一位,且 m = 0 m=0 m=0时答案为 1 1 1,因此我们可以只考虑 m m m。

我们可以转换一下,我们假设 d p dp dp数组不动,对 m m m条边进行移动,每次 m m m条边移动后的端点进行更新答案,相当于变相的移动了 d p dp dp数组。

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f3f3f3f3f;
int n, m, k;
int dp[N], pre[N];
vector<pair<int, int>> edge;
int MOD(int x)
{
	return (x % n + n) % n;
}
void solve()
{
	cin >> n >> m >> k;
	for (int i = 1, u, v; i <= m; i++)
	{
		cin >> u >> v;
		u--, v--;
		edge.push_back({u, v});
	}
	dp[0] = 1;
	for (int i = 1; i <= k; i++)
	{
		for (auto [u, v] : edge)
		{
			u = MOD(u - i + 1);//上一层的u
			pre[u] = dp[u];
		}

		for (auto [u, v] : edge)
		{
			dp[MOD(v - i)] = dp[MOD(v - i)] + pre[MOD(u - i + 1)];
			dp[MOD(v - i)] %= mod;
		}
	}
	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		ans = (ans + dp[i]) % mod;
	}
	cout << ans << endl;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int test = 1;
	// cin >> test;
	for (int i = 1; i <= test; i++)
	{
		solve();
	}
	return 0;
}
相关推荐
斐夷所非15 小时前
在纷繁竞逐中稳步前行:C++ 2006–2020
c++
QXWZ_IA16 小时前
**电力登高作业高空失保实时监管:千寻智能安全带高挂低用监测方案**
人工智能·科技·算法·能源·智能硬件
保持清醒54016 小时前
类和对象上
c++
爱刷碗的苏泓舒16 小时前
FFRT:固定失败率比率检验、宽巷模糊度固定及 Ratio Test
算法·相位偏差·模糊度固定·ppp-ar·ffrt·ratio test·wlnl
小园子的小菜16 小时前
深入理解 JVM 垃圾回收:从对象判定、回收算法到经典收集器全解析
jvm·算法
hold?fish:palm16 小时前
7 接雨水
开发语言·c++·leetcode
2601_9545267516 小时前
【硬核长文】从卡门涡街物理方程到边缘网关温压补偿算法:工业蒸汽测控实战,深度解密靠谱的涡街流量计厂家有哪些
算法
吞下星星的少年·-·17 小时前
牛客技能树:区间翻转
算法·滑动窗口
流浪00117 小时前
数据结构篇(五):线性表——栈
数据结构·c++·算法
郝学胜-神的一滴17 小时前
中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
c++·线性代数·unity·矩阵·游戏引擎·unreal engine·opengl