RainbowDash 的旅行

D RainbowDash 的旅行 - 第七届校赛正式赛 —— 补题

题目大意:

湖中心有一座岛,湖的外围有 m m m 间木屋(围绕小岛) ,第 i i i 间木屋和小岛之间有 a i a_i ai A A A 类桥, b i b_i bi B B B 类桥, A A A 桥有车可以快速通过, B B B 桥需要步行,速度稍慢。

你计划一次 n n n 天的旅行,对于每一天,你都需要从当前木屋走到小岛游玩,再走到任何一间木屋(包括出发时所在的木屋),你不想浪费时间在赶路上,于是一天通过的两座桥必须有一座是 A A A 类桥,起始在 1 1 1 号木屋,问旅行 n n n 天,有多少不同的路线组合?

1 < = n < = 1000 , 1 < = m < = 100 1<=n<=1000,1<=m<=100 1<=n<=1000,1<=m<=100

1 < = a i , b i < = 1 0 4 1<=a_i,b_i<=10^4 1<=ai,bi<=104

思路:

考虑第 i i i 间木屋到第 j j j 间木屋有多少种方法

f [ i ] [ j ] f[i][j] f[i][j] 表示第 i i i 间木屋到第 j j j 间木屋总方案数

如果从第 i i i 间木屋去小岛走 A A A 桥,去第 j j j 间木屋则可以走 A A A 桥或者 B B B

那么方案数为 a [ i ] ∗ ( a [ j ] + b [ j ] ) a[i]*(a[j]+b[j]) a[i](a[j]+b[j])

如果从第 i i i 间木屋去小岛走 B B B 桥,去第 j j j 间木屋只可以走 A A A

方案数为 b [ i ] ∗ a [ j ] b[i]*a[j] b[i]a[j]

int f[M][M];
for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){f[i][j]=a[i]*(a[j]+b[j])+b[i]*a[j];}
}

有了第 i i i 间木屋到第 j j j 间木屋总方案数,可以考虑 1 − n 1-n 1n 天总方案数的 d p dp dp

考虑第 k k k 天到达 第 1 − m 1-m 1m 间木屋的的方案数

d p [ k ] [ j ] dp[k][j] dp[k][j] 表示第 k k k 天到达第 j j j 间木屋的方案数

对于第 k k k 天到达第 j j j 间木屋的方案数,

考虑由第 k − 1 k-1 k1 天 从 i ( 1 − n ) i(1-n) i(1n) 间木屋转移到第 j j j 间木屋的方案数: d p [ k ] [ j ] + = d p [ k − 1 ] [ i ] ∗ f [ i ] [ j ] dp[k][j]+=dp[k-1][i]*f[i][j] dp[k][j]+=dp[k1][i]f[i][j]

第一天在1号木屋,所以第一天应由 d p [ 0 ] [ 1 ] dp[0][1] dp[0][1] 去转移,所以初始化 d p [ 0 ] [ 1 ] = 1 dp[0][1]=1 dp[0][1]=1

int dp[N][M];for(int k=1;k<=n;k++){for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){dp[k][j]+=dp[k-1][i]*f[i][j];}}
}

最后统计第 n n n 天到达第 1 − m 1-m 1m 间木屋总数即可

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define PII pair<int,int>
#define lowbit(x) x&-x
#define ALL(x) x.begin(),x.end()const int mod = 998244353;
const int N = 100 + 10;int f[N][N],dp[1010][N];
int a[N],b[N];
int n,m;void solve() {cin>>n>>m;for(int i=1;i<=m;i++){cin>>a[i];}for(int i=1;i<=m;i++){cin>>b[i];}for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){f[i][j]=a[i]*(a[j]+b[j])%mod+b[i]*a[j]%mod;f[i][j]%=mod;}}dp[0][1]=1;for(int k=1;k<=n;k++){for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){dp[k][j]+=dp[k-1][i]*f[i][j]%mod;dp[k][j]%=mod;}}}int ans=0;for(int i=1;i<=m;i++){ans+=dp[n][i];ans%=mod;}cout<<ans<<'\n';}signed main() {std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
//	cin >> T;while (T--) {solve();}return 0;
}

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

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

相关文章

MySQL-SQL-DDL语句、表结构创建语句

一.SQL SQL&#xff1a;一门操作关系型数据库的编程语言&#xff0c;定义操作所有关系型数据库的统一标准 二. DDL-数据库 1. 查询所有数据库 命令&#xff1a;show databases; 2. 查询当前数据库 命令&#xff1a;select database(); 3. 创建数据库 命令&#xff1a;create da…

Sora结构猜测

方案&#xff1a;VAE Encoder&#xff08;视频压缩&#xff09; -> Transform Diffusion &#xff08;从视频数据中学习分布&#xff0c;并根据条件生成新视频&#xff09; -> VAE Decoder &#xff08;视频解压缩&#xff09; 从博客出发&#xff0c;经过学术Survey&am…

TortoiseSVN设置忽略清单

1.TortoiseSVN > Properties&#xff08;如果安装了 TortoiseSVN&#xff09;。 2. 在弹出的属性窗口中&#xff0c;点击 New > Other。 4. 在 Property name 中输入 svn:ignore 。 5. 在 Property value 中输入要忽略的文件夹或文件名称&#xff0c;例如&#xff1a; #…

深入解析Java哈希表:从理论到实践

哈希表&#xff08;Hash Table&#xff09;是计算机科学中最重要的数据结构之一&#xff0c;也是Java集合框架的核心组件。本文将以HashMap为切入点&#xff0c;深入剖析Java哈希表的实现原理、使用技巧和底层机制。 一、哈希表基础原理 1. 核心概念 键值对存储&#xff1a;通…

leetcode:1582. 二进制矩阵中的特殊位置(python3解法)

难度&#xff1a;简单 给定一个 m x n 的二进制矩阵 mat&#xff0c;返回矩阵 mat 中特殊位置的数量。 如果位置 (i, j) 满足 mat[i][j] 1 并且行 i 与列 j 中的所有其他元素都是 0&#xff08;行和列的下标从 0 开始计数&#xff09;&#xff0c;那么它被称为 特殊 位置。 示…

《数字图像处理》教材寻找合作者

Rafael Gonzalez和Richard Woods所著的《数字图像处理》关于滤波器的部分几乎全错&#xff0c;完全从零开始写&#xff0c;困难重重。关于他的问题已经描述在《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》。 现寻找能够共同讨论、切磋、…

为 Jenkins Agent 添加污点(Taint)容忍度(Toleration)

在 Kubernetes&#xff08;k8s&#xff09;环境中使用 Jenkins 时&#xff0c;为 Jenkins Agent 添加污点&#xff08;Taint&#xff09;容忍度&#xff08;Toleration&#xff09;是一种常见的配置操作&#xff0c;它允许 Jenkins Agent Pod 被调度到带有特定污点的节点上。下…

LeetCode算法题(Go语言实现)_28

题目 Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一…

使用python实现视频播放器(支持拖动播放位置跳转)

使用python实现视频播放器&#xff08;支持拖动播放位置跳转&#xff09; Python实现视频播放器&#xff0c;在我早期的博文中介绍或作为资料记录过 Python实现视频播放器 https://blog.csdn.net/cnds123/article/details/145926189 Python实现本地视频/音频播放器https://bl…

用Python和Pygame创造粉色粒子爱心:3D渲染的艺术

引言 在计算机图形学中&#xff0c;3D效果的2D渲染是一个迷人的领域。今天&#xff0c;我将分享一个使用Python和Pygame库创建的粉色粒子爱心效果。这个项目不仅视觉效果惊艳&#xff0c;而且代码简洁易懂&#xff0c;非常适合图形编程初学者学习3D渲染的基础概念。 项目概述…

在汇编层面理解MESI

理解MESI协议在汇编层面的表现需要结合缓存一致性机制和处理器指令执行的行为。以下是分步骤的解释&#xff1a; 1. MESI协议基础 MESI是缓存行&#xff08;Cache Line&#xff09;状态的协议&#xff0c;定义四种状态&#xff1a; Modified&#xff08;修改&#xff09;&…

爱瑞编程2025暑期CSP集训营开始招生啦!

一、什么是暑期CSP集训营&#xff1f; 为全力备战2025年9月CSP-J/S认证&#xff0c;举办的线下编程集训活动。 旨在通过高强度编程训练&#xff0c;帮助学员提升竞赛能力&#xff0c;冲刺一等奖。 二、为什么参加集训营&#xff1f; 高效编程特训&#xff1a;封闭式学习&…

问题大集10-git使用commit提交中文显示乱码

&#xff08;1&#xff09;问题 &#xff08;2&#xff09;解决步骤 1&#xff09; 设置全局编码为 UTF-8 git config --global core.quotepath false git config --global i18n.commitEncoding utf-8 git config --global i18n.logOutputEncoding utf-8 2&#xff09; 显示或设…

当AI开始“思考“:大语言模型的文字认知三部曲

引言&#xff1a;从《黑客帝国》说起 1999年上映的科幻经典《黑客帝国》描绘了一个令人震撼的未来图景——人类生活在一个由人工智能构造的数字矩阵中。当我们观察现代大型语言模型的工作原理时&#xff0c;竟发现与这个虚构世界有着惊人的相似&#xff1a;人们正在用矩阵以及矩…

Golang改进后的任务调度系统分析

以下是整合了所有改进点的完整代码实现: package mainimport ("bytes""context""fmt""io""log""net/http""sync""time""github.com/go-redis/redis/v8""github.com/robfig/…

前沿技术有哪些改变生活新趋势

太阳能技术正在改变的生活 它让移动设备有了新的能源选择 太阳能板能直接把阳光转成电能 这对户外活动或者电力不便的地方特别有用 比如现在市面上有不少太阳能充电宝 小巧便携 可以随时给手机平板充电 需要注意的是 这些设备得放在太阳下才能工作 但它们确实能让人在野外多用…

基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战

深度学习框架与大模型技术的融合正推动人工智能应用的新一轮变革。百度飞桨&#xff08;PaddlePaddle&#xff09;作为国内首个自主研发、开源开放的深度学习平台&#xff0c;近期推出的3.0版本针对大模型时代的开发痛点进行了系统性革新。其核心创新包括“动静统一自动并行”&…

C++设计模式-模板方法模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

一、基本介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;是行为型设计模式&#xff0c;其核心思想是定义算法骨架&#xff0c;将具体步骤延迟到子类实现。如同烹饪菜谱的标准化流程&#xff1a;所有厨师遵循相同的操作流程&#xff08;备料→烹饪→装盘&am…

Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)

一、Logback 在 Spring Boot 中&#xff0c;日志框架默认使用的是 Logback&#xff0c;Spring Boot 提供了对日志配置的简化 Spring Boot 默认会将日志输出到控制台&#xff0c;并且日志级别为 INFO 可以在 application.yaml 或 application.properties 文件中进行日志配置 …

Python 异步编程:如何将同步文件操作函数无缝转换为异步版本

在 Python 的异步编程世界中,os.path 模块的同步文件操作函数常常让我们陷入两难境地:直接使用它们会阻塞事件循环,降低程序性能;但这些函数又如此方便实用。今天,我将带你探索如何巧妙地将这些同步函数转换为异步版本,让你的异步程序既能享受高效的事件处理,又能无缝利…