逐月新星杯

news/2024/10/23 19:27:31/文章来源:https://www.cnblogs.com/chengning0909/p/18498118

改题链接

C. 不走回头路

我们先考虑暴力 dp

我们可以记 \(dp_{i, j, k}\) 表示当前走了 \(i\) 条边,在第 \(j\) 个点,上一次走的是编号为 \(k\) 的边。

那么我们可以写出转移:

dp[0][1][0] = sum[0][1] = 1;
for (int i = 1; i <= k; i++) {for (int j = 1; j <= n; j++) {for (auto [t, id] : g[j]) {dp[i & 1][j][id] = (sum[i - 1][t] + mod - dp[(i & 1) ^ 1][t][id]) % mod;// 这里需要滚动,为了方便,还是描述为 dp[i][j][id](sum[i][j] += dp[i & 1][j][id]) %= mod;}}
}
cout << sum[k][n];

然后,我们可以列出式子:

\[dp_{i, j, id} = sum_{i - 1, t} - dp_{i - 1, t, id} \]

\[dp_{i - 1, t, id} = sum_{i - 2, j} - dp_{i - 2, j, id} \]

\[dp_{i - 2, j, id} = sum_{i - 3, t} - dp_{i - 3, t, id} \]

\[\vdots \]

然后,我们将式子分别代入进去:

\[dp_{i, j, id} = sum_{i - 1, t} - sum_{i - 2, j} + sum_{i - 3, t} - sum_{i - 4, j} + \dots \]

像这样,我们会发现这个 \(dp\) 数组毫无用处,可以直接变成用 \(sum\) 数组计算答案。

然后就可以写出这样的暴力:

sum[0][1] = 1;
for (int i = 1; i <= k; i++) {for (int j = 1; j <= n; j++) {for (auto [t, id] : g[j]) {(sum[i][j] += sum[i - 1][t] - sum[i - 2][j] + mod) %= mod;}if (i > 1) (sum[i][j] += sum[i - 2][j]) %= mod;}
}
cout << (sum[k][n] - sum[k - 2][n] + mod) % mod;

我们再把这个 \(sum_{i - 2, j}\) 合并一下。

sum[0][1] = 1;
for (int i = 1; i <= k; i++) {for (int j = 1; j <= n; j++) {for (auto [t, id] : g[j]) {(sum[i][j] += sum[i - 1][t]) %= mod;}if (i > 1) (sum[i][j] += (1 + mod - g[j].size()) % mod * sum[i - 2][j] % mod) %= mod;}
}
cout << (sum[k][n] - sum[k - 2][n] + mod) % mod;

然后我们就发现这个 \(sum\) 的转移非常简单,状态也非常简单,一看就可以用矩阵加速。

这个比较像斐波那契数列的递推式。

我们可以列出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/820802.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[MySQL笔记]窗口函数

什么是窗口函数 窗口函数(Window Function),又被叫做分析函数(Analytics Function)。 窗口函数允许用户在不显式分组查询的情况下对结果集进行分组和聚合计算。 窗口函数能够为结果集中的每一行计算类似排名、行号、百分比和移动聚合函数等值。 窗口函数原则上只能写在select子…

ESXI执行此操作的权限被拒绝的解决方法

ESXI执行此操作的权限被拒绝的解决方法不知道什么原因,用浏览器登录ESXI,输入了正确用户和密码,提示执行此操作的权限被拒绝。其原因是系统为防止远程用户,直接登录到此主机。而开启了“锁定模式”我们只需要将“锁定模式”的功能关闭。问题就能解决。 具体操作如下: 我们…

xshell无法打开

解决的博客:xshell无法启动无法打开,双击无任何反应_xshell.exe点击没反应-CSDN博客 问题描述放假在家远程公司电脑发现xshell7打不开,开始以为是远程软件权限问题后来发现不是,搞了一整天,差点重装了电脑,今天上班还是打不开,查了一下资料终于搞定了。 解决方法 找到…

.上下数据流图 1 二. 数据库模型 1 三. 页面原型 2

目录 一.上下数据流图 1 二. 数据库模型 1 三. 页面原型 一.上下数据流图二.数据库三.页面原型 1.先看一下大框生产报工 工序过设置和工序流程设置 最重要的报工 点击二维码报工 手机端报工 具体报工页面 排产 仓库

使用 Cursor 和 Devbox 快速开发并上线 Gin 项目

作为开发者,最让我们头疼的事情是什么?那必须是环境配置、版本控制以及各种部署配置等等繁琐的工作。 想象一下,如果你只需点击几下鼠标,就能拥有一个完全配置好的开发环境,支持从 Java 到 Python,从 React 到 Vue 的各种主流技术栈。 而且可以自动分配域名、HTTPS 证书,…

UML与面向对象程序设计原则

UML与面向对象程序设计原则 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图; 2、理解面向对象程序设计原则。[实验任务一]:UML复习 阅读教材第一章复习UML,回答下述问题: 面向对象程序设计中类与…

实验2 类和对象_基础编程1

实验任务1 代码: t.h:1 #pragma once2 3 #include<string>4 5 class T {6 public:7 T(int x = 0, int y = 0);8 T(const T& t);9 T(T&& t); 10 ~T(); 11 void adjust(int ratio); 12 void display()const; 13 private: 14 int …

第一次团队作业——“行趣”智能旅游软件

作业所属的课程 软件工程2024作业要求 2024秋软工实践团队作业-第一次作业的目标 开发一款基于LLM大模型接口的软件,为这个软件做需求分析团队名称 十光年团队成员学号-姓名 施靖杰-102201327邓才慧-102201102陈宇尧-102201119陆旭东-102201118黄宇舟-102201331邱予-102202121…

24.10.23

出题人可能原神玩多了。 A 乘法少说要乘个 \(2\) 才有意义,所以答案是 \(\log\) 量级,直接 dp 设 \(f_{i,j}\) 表示算出 \(i\) 用了 \(j\) 个乘号最少用几个加号。 一个性质是,如果相加那么较小数不超过 \(4\),然后直接枚举加多少乘多少刷表。 f[1][0] = 0; rep(i, 1, n) r…

七月在线公开课笔记-二十三-

七月在线公开课笔记(二十三) 人工智能—机器学习中的数学(七月在线出品) - P1:Taylor展式与拟牛顿 - 七月在线-julyedu - BV1Vo4y1o7t1 这次我们探讨它的展示与它的相关应用,如米牛顿。我们首先给出塔的展示的本身的,它的定义,它的展示的公式的本身。然后我们利用它来计…

七月在线公开课笔记-二十七-

七月在线公开课笔记(二十七) 人工智能—机器学习公开课(七月在线出品) - P25:【公开课】数据挖掘与机器学习基础 - 七月在线-julyedu - BV1W5411n7fg 可以是吧?好,那么我们稍等一下啊,稍等一下我们。在8点钟我们就准时开始我们的一个直播的内容。对。那么各位同学之前有…

七月在线公开课笔记-二十六-

七月在线公开课笔记(二十六) 人工智能—机器学习公开课(七月在线出品) - P18:世界杯数据分析案例 - 七月在线-julyedu - BV1W5411n7fg 然后我们来做个分析吧,所以大家喜欢做一些比赛的分析,对吧?然后大家最关注的当然是决赛半决赛啊,可能也多多分析一下,分析到4分之1…