Freda的道路

2024-02-20 16:18
文章标签 道路 freda

本文主要是介绍Freda的道路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述 Description
Freda要到Rainbow的城堡去玩了。我们可以认为两座城堡位于同一条数轴上,Freda的城堡坐标是0,Rainbow的城堡坐标是N。正常情况 下,Freda会朝着同一个方向(即Rainbow的城堡相对于Freda的城堡的方向)走若干步之后来到Rainbow的城堡,而且步长都为1或2。可 是,今天Freda在途中遇见了来自上海的小猫Resodo,惊奇之下,居然有一步走反了方向!不过,Freda并没有神智不清,它只有一步走反了方向, 而且这一步的步长也是1或2. 同时,Freda并不会路过Rainbow的城堡而不停下来。当然,Freda是在途中遇到Resodo的,所以它不会在 自己家门口就走错方向。
举个例子,如果Rainbow的城堡坐标是3,那么下面两条路径是合法的:
0->1->2->1->3
0->1->-1->1->3
当然,还有其它的合法路径。下面这些路径则是不合法的:
0->-1->1->3 (Freda不可能第一步就走错方向)
0->1->3(Freda一定是有一步走错方向的)
0->2->1->0->2->3(Freda只有一步是走错方向的)
0->-1->0->3(Freda每步的长度一定是1或2)
0->1->2->4->3(Freda不会越过Rainbow的城堡再回来)
0 -> 1 -> 2 -> 3 -> 2 -> 3(Freda一旦到达了Rainbow的城堡,就会停下来)
你现在需要帮助Freda求出,它一共有多少种方法能够到达Rainbow的城堡呢?
输入描述 Input Description
一行一个整数N,表示Rainbow城堡的坐标

输出描述 Output Description
一行一个整数,表示Freda到Rainbow城堡的不同路径数。由于这个数字可能很大,你只需要输出它mod 1000000007的结果。

样例输入 Sample Input
2

样例输出 Sample Output
5
数据范围及提示 Data Size & Hint
对于第一组样例,如下5条路径是合法的:
0->1->0->2
0->1->-1->0->1->2
0->1->-1->0->2
0->1->0->1->2
0->1->-1->1->2
数据范围与约定
对于10%的数据,N<=20.
对于70%的数据,N<=1000.
对于90%的数据,N<=1000000.
对于100%的数据,N<=10^15.
题解:
这是一个比较典型的用矩阵乘法优化状压动规的题。
先来写一下dp方程。
设f[i][0]表示走到点i并且途中没有转过的路径数。
设f[i][1]表示走到点i并且途中转过一次的路径数。
先考虑f[i][0]
可以发现f[i][0]其实就是斐波那契数列。
即f[i][0]=f[i-1][0]+f[i-2][0] (i>=3);
然后考虑f[i][1];
可以发现f[i][1]只有两种情况
1.从这个点的前面走过来,即从f[i-1][1]或f[i-2][1]走过来
2.从这个点的后面转回来,由于只准转一次,并且只能转一步或两步,所以只能从f[i+1][0]或f[i+2][0]转回来
综合1,2可知f[i][1]=f[i-1][1]+f[i-2][1]+f[i+1][0]+f[i+2][0] (i>=3);
接着我们就可以dp了
时间复杂度O(n);
这样我们可以通过90%的数据。
100%的数据需要使用矩阵乘法优化。。
我们可以发现其实我们要求的只有f[i][1],而f[i][1]只与
f[i-1][1],f[i-2][1],f[i+1][0],f[i+2][0]有关
其中f[i-1][1]正好是f[i][1]的前一项,这样很明显可以使用矩阵乘法转移状态;
构造如下矩阵:
1001111011001000 ×f[i1][1]f[i+2][0]f[i+1][0]f[i2][1] = f[i][1]f[i+3][0]f[i+2][0]f[i1][1]
这样给定一个n(n>=3)我们只需要求出第一个矩阵的n-2次方
再乘上
f[2][1]f[5][0]f[4][0]f[1][1] 即可
代码:

#include<iostream>
#include<cstdio>
#define m 1000000007
using namespace std;
long long ans[10][10],aa[10][10],n,sum,t;
bool f;
inline long long cheng(long long a,long long b)
{long long ans(0);a=a%m;while (b>0){if (b%2==1)ans=(ans+a)%m;b/=2;a=(a*2)%m;}return ans;
}
inline void power(long long x)
{long long k[5][5];while (x>0){if (x%2==1){if (f==false){for (int i=1;i<=4;i++)for (int j=1;j<=4;j++)ans[i][j]=aa[i][j];f=true;               }else{for (int i=1;i<=4;i++)for (int j=1;j<=4;j++){k[i][j]=0;for (int p=1;p<=4;p++)k[i][j]=(k[i][j]+cheng(ans[i][p],aa[p][j]))%m;}for (int i=1;i<=4;i++)for (int j=1;j<=4;j++)ans[i][j]=k[i][j];}}x/=2;for (int i=1;i<=4;i++)for (int j=1;j<=4;j++){k[i][j]=0;for (int p=1;p<=4;p++)k[i][j]=(k[i][j]+cheng(aa[i][p],aa[p][j]))%m;}for (int i=1;i<=4;i++)for (int j=1;j<=4;j++)aa[i][j]=k[i][j];}
} 
int main()
{ cin>>n;if (n==1) {cout<<1<<endl;return 0;}if (n==2){cout<<5<<endl;return 0;}f=false;aa[1][1]=1;aa[1][2]=1;aa[1][3]=1;aa[1][4]=1;aa[2][1]=0;aa[2][2]=1;aa[2][3]=1;aa[2][4]=0;aa[3][1]=0;aa[3][2]=1;aa[3][3]=0;aa[3][4]=0;aa[4][1]=1;aa[4][2]=0;aa[4][3]=0;aa[4][4]=0; power(n-2);sum=(cheng(ans[1][1],5)+cheng(ans[1][2],8)+cheng(ans[1][3],5)+cheng(ans[1][4],0))%m;printf("%lld\n",sum);
}

这篇关于Freda的道路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728798

相关文章

DoIP-ISO 13400-1 道路车辆-基于互联网协议的诊断通信(DoIP)-第 1 部分:一般信息和用例定义 (1/2)

如下内容基于2011版本的 ISO 13400开展,内容较多,拆分为2篇,此篇为 1/2。 前言 ISO(国际标准化组织)是一个全球范围内的国际标准机构联合体(ISO 成员机构)。国际标准的制备工作通常通过 ISO 技术委员会进行。每个相关成员机构都有权在已建立的技术委员会中代表其利益。与 ISO 保持联系的国际组织、政府和非政府组织也参与这项工作。ISO 与国际电工委员会(IEC)在所有电气

基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练

基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练 参考地址:https://aistudio.baidu.com/projectdetail/8271882 基于python35+paddle120+env环境 预测可视化结果: (一)安装环境: 先上传本地下载的源代码PaddleRS-develop.zip 解压PaddleRS-develop.zip到目录

基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码

基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码 预测结果: 预测影像: (一)准备道路数据集 下载数据集地址: https://aistudio.baidu.com/datasetdetail/56961 mass_road.zip —原始地址Url: https://ai-studio-online.bj.bcebos

Leetcode3244. 新增道路查询后的最短距离 II

Every day a Leetcode 题目来源:3244. 新增道路查询后的最短距离 II 解法1:贪心 由于题目保证添加的边(捷径)不会交叉,从贪心的角度看,遇到捷径就走捷径是最优的。所有被跳过的城市都不可能再出现在最短路了,直接删除掉。 代码: /** @lc app=leetcode.cn id=3244 lang=cpp** [3244] 新增道路查询后的最短距离 II*//

Leetcode3243. 新增道路查询后的最短距离 I

Every day a Leetcode 题目来源:3243. 新增道路查询后的最短距离 I 解法1:广度优先搜索 暴力。 每次加边后重新跑一遍 BFS,求出从 0 到 n−1 的最短路。 代码: /** @lc app=leetcode.cn id=3243 lang=cpp** [3243] 新增道路查询后的最短距离 I*/// @lc code=start// 广度优先搜索cla

雾天道路目标检测数据集 8700张 雾天 带标注 voc yolo

随着自动驾驶技术的发展,如何在恶劣天气条件下保证车辆的安全行驶成为了一个重要的研究课题。雾天环境下,能见度降低会严重影响目标检测系统的性能,因此开发针对雾天环境的目标检测算法变得尤为重要。本数据集旨在为研究人员提供一个高质量的、可用于训练和评估雾天道路目标检测模型的数据集。 数据集特点 类型:雾天道路目标检测数据集。格式:VOC和YOLO格式,适用于训练目标检测模型。规模:共包含87

在编程学习的道路上,面对Bug和复杂算法时,我们常常会感到挫折和困惑。以下是一些克服这些挑战的有效方法:

在编程学习的道路上,面对Bug和复杂算法时,我们常常会感到挫折和困惑。以下是一些克服这些挑战的有效方法: 系统化问题解决: 遇到Bug时,首先要从整体入手,系统地分析问题。例如,可以通过逐步调试代码,使用断点和日志来定位错误来源。保持代码简洁,逐步添加新功能,有助于减少Bug的产生。 拆解算法问题: 面对复杂的算法,尝试将其拆解成更小的子问题。首先理解问题的基本概念和要求,然后用伪代码或流程

“复杂天气条件下北京道路图像识别的鲁棒性提升策略”

在复杂天气条件下,北京道路图像识别的鲁棒性提升策略需要综合考虑多种因素,包括天气状况、图像采集设备的性能、图像处理算法的优化等。以下是一些具体的策略: 一、预处理策略 图像去噪: 复杂天气条件下(如雨、雪、雾霾等),图像中常含有大量噪声。通过高斯滤波、中值滤波等算法对图像进行去噪处理,可以减少噪声对图像识别的影响。图像增强: 调整图像的对比度和亮度,以改善图像的视觉效果。在雾霾天气下,可以采用

基于道路标线的城市环境单目定位

文章:Monocular Localization in Urban Environments using Road Markings 作者:Yan Lu Jiawei Huang Yi-Ting Chen Bernd Heisele 编译:点云PCL 本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PDF论文,欢迎转发朋友圈。内容如有错误欢迎评论留言,未经允许请勿转载!