P1990-覆盖墙壁

这篇具有很好参考价值的文章主要介绍了P1990-覆盖墙壁。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

P1990-覆盖墙壁

分情况:

\[\left\{ \begin{aligned} & 条形 \left\{ \begin{aligned} 横着\\ 竖着\\ \end{aligned}\right. \\ & L形\\ \end{aligned} \right. \]

条形

设 $ F(n)$ 长度为 \(n\) 的方法数

横着

\(F(n)+=F(n-1)\)

竖着

\(F(n)+=F(n-2)\)

L形

\(G(n)\) 为长度凸出来那一点到 \(n\) 的方法数

\(G(n)=G(n-1)+F(n-2)\)

此为\(G\) 的递推公式

答案

\(F(n)=F(n-1)+F(n-2)+2\times G(n-1)\)

此为\(F\) 的递推公式

初始条件

\[F(0)=1\\ F(1)=1\\ F(2)=2\\\ \\ G(1)=0\\ G(2)=1\\ G(3)=1\\ G(4)=3\\ \]

变式

\[\begin{aligned} &G(n)-G(n-1)=F(n-2)\\ &G(n-1)-G(n-2)=F(n-3)\\ &\cdots\\ &G(4)-G(3)=F(2)\\ &G(3)-G(2)=F(1)\\ &G(2)-G(1)=F(0)\\ &累加得\\ &G(n)=\sum_{k=0}^{n-2} F(k)+G(1)\\ &G(2)=1\\ &G(n)=\sum_{k=0}^{n-2} F(k)\\ \end{aligned} \]

所以\(F(n)\)

\[\begin{aligned} &F(n)=F(n-1)+F(n-2)+2\times G(n-1)\\ &带入G(n-1)\\ &得到F(n)=F(i-1)+F(i-2)+2\times\sum_{i=0}^{n-3} F(i)\\ \end{aligned} \]
#include<iostream>
using namespace std;
const int N = 1e7+9;
int F[N];
int main() {
	int n; cin >> n;
	int ch = 0;
	F[0] = 1; F[1] = 1; F[2] = 2;
	for (int i = 3; i <= n; i++) {
		ch += F[i - 3];
		ch %= 10000;
		F[i] = F[i - 1] + F[i - 2] + 2 * ch;
		F[i] %= 10000;
	}
	cout << F[n];
	return 0;
}

或者改为

#include<iostream>
using namespace std;
const int N = 1e7 + 9;
int F[N];
int main() {
	int n; cin >> n;
	int ch = 0;
	F[3] = 1;\\表示n=0的时候
	for (int i = 4; i <= n+3; i++) {
		ch += F[i - 3];
		ch %= 10000;
		F[i] = F[i - 1] + F[i - 2] + 2 * ch;
		F[i] %= 10000;
	}
	cout << F[n+3];
	return 0;
}

由于只用到了\(F(i)\) \(F(i-1)\) \(F(i-2)\) \(F(3)\)

简化为

#include<iostream>
using namespace std;
int main() {
	int n; cin >> n;
	int ch = 0;
	int a = 0, b = 0, c = 1,ans=0;
	for (int i = 1; i <= n; i++) {
		ch += a;
		ch %= 10000;
		ans = b + c + 2 * ch;
		ans %= 10000;
		a = b;
		b = c;
		c = ans;
	}
	cout << ans;
	return 0;
}

\(a\) 表示 \(F[-2]\)

\(b\) 表示 \(F[-1]\)

\(c\) 表示 \(F[0]\)

\(ans\) 表示 \(F[1]\)文章来源地址https://www.toymoban.com/news/detail-779431.html

P1990-覆盖墙壁

分情况:

\[\left\{ \begin{aligned} & 条形 \left\{ \begin{aligned} 横着\\ 竖着\\ \end{aligned}\right. \\ & L形\\ \end{aligned} \right. \]

条形

设 $ F(n)$ 长度为 \(n\) 的方法数

横着

\(F(n)+=F(n-1)\)

竖着

\(F(n)+=F(n-2)\)

L形

\(G(n)\) 为长度凸出来那一点到 \(n\) 的方法数

\(G(n)=G(n-1)+F(n-2)\)

此为\(G\) 的递推公式

答案

\(F(n)=F(n-1)+F(n-2)+2\times G(n-1)\)

此为\(F\) 的递推公式

初始条件

\[F(0)=1\\ F(1)=1\\ F(2)=2\\\ \\ G(1)=0\\ G(2)=1\\ G(3)=1\\ G(4)=3\\ \]

变式

\[\begin{aligned} &G(n)-G(n-1)=F(n-2)\\ &G(n-1)-G(n-2)=F(n-3)\\ &\cdots\\ &G(4)-G(3)=F(2)\\ &G(3)-G(2)=F(1)\\ &G(2)-G(1)=F(0)\\ &累加得\\ &G(n)=\sum_{k=0}^{n-2} F(k)+G(1)\\ &G(2)=1\\ &G(n)=\sum_{k=0}^{n-2} F(k)\\ \end{aligned} \]

所以\(F(n)\)

\[\begin{aligned} &F(n)=F(n-1)+F(n-2)+2\times G(n-1)\\ &带入G(n-1)\\ &得到F(n)=F(i-1)+F(i-2)+2\times\sum_{i=0}^{n-3} F(i)\\ \end{aligned} \]
#include<iostream>
using namespace std;
const int N = 1e7+9;
int F[N];
int main() {
	int n; cin >> n;
	int ch = 0;
	F[0] = 1; F[1] = 1; F[2] = 2;
	for (int i = 3; i <= n; i++) {
		ch += F[i - 3];
		ch %= 10000;
		F[i] = F[i - 1] + F[i - 2] + 2 * ch;
		F[i] %= 10000;
	}
	cout << F[n];
	return 0;
}

或者改为

#include<iostream>
using namespace std;
const int N = 1e7 + 9;
int F[N];
int main() {
	int n; cin >> n;
	int ch = 0;
	F[3] = 1;\\表示n=0的时候
	for (int i = 4; i <= n+3; i++) {
		ch += F[i - 3];
		ch %= 10000;
		F[i] = F[i - 1] + F[i - 2] + 2 * ch;
		F[i] %= 10000;
	}
	cout << F[n+3];
	return 0;
}

由于只用到了\(F(i)\) \(F(i-1)\) \(F(i-2)\) \(F(3)\)

简化为

#include<iostream>
using namespace std;
int main() {
	int n; cin >> n;
	int ch = 0;
	int a = 0, b = 0, c = 1,ans=0;
	for (int i = 1; i <= n; i++) {
		ch += a;
		ch %= 10000;
		ans = b + c + 2 * ch;
		ans %= 10000;
		a = b;
		b = c;
		c = ans;
	}
	cout << ans;
	return 0;
}

\(a\) 表示 \(F[-2]\)

\(b\) 表示 \(F[-1]\)

\(c\) 表示 \(F[0]\)

\(ans\) 表示 \(F[1]\)

到了这里,关于P1990-覆盖墙壁的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【动态规划】【C++算法】2742. 给墙壁刷油漆

    【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 动态规划汇总 给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time ,分别表示给 n 堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠: 一位需要 付费 的油漆匠,刷第 i 堵墙需要花费 time[i] 单位

    2024年02月19日
    浏览(20)
  • C++-vector:vector最值【*max_element(v.begin(), v.end())】【下标:max_element(v.begin(),v.end()) - v.begin()】

    当我们有一个 vectorint 型数组vec时,我们只需要获取它的最大值,而又不想打乱它的顺序 例 vectorint vec 最大值: 最小值: 例 a[]={1,2,3,4,5,6}; 最大值: 最小值: 例 vectorint vec 最大值下标: 最小值下标: 例 a[]={1,2,3,4,5,6}; 最大值下标: 最小值下标: 注意:返回的是第一个最

    2024年02月06日
    浏览(27)
  • 如何用微信小程序实现远程控制墙壁插座

    如何用微信小程序实现远程控制墙壁插座呢? 本文描述了使用微信小程序调用HTTP接口,实现控制墙壁插座,替换原有插座,安装智能插座后,即可实现远程控制。 可选用产品:可根据实际场景需求,选择对应的规格 序号 设备名称 厂商 1 智能WiFi墙壁插座10A 统软云物联 2 智

    2024年04月25日
    浏览(24)
  • oracle 之存储过程 begin ...... ; ...... end

    点击查看代码

    2024年02月08日
    浏览(36)
  • All the stories begin at installation

    Before installation, there are some key points about Conan: “Conan is a dependency and package manager for C and C++ languages.” “With full binary management, Conan can create and reuse any number of different binaries (for different configurations like architectures, compiler versions, etc.) for any number of different versions of a package, using exa

    2024年02月20日
    浏览(26)
  • 使用_begin{thebibliography}__bibitem 如何参考文献

    本人是tex新手,如果各位大佬有更好的方法欢迎分享,不胜感激。 本文适用于使用 begin{thebibliography} 和 bibitem 排序的情况,如果使用bibtex排序那么网上很多教程。 在使用tex发现不会自动排序非常僵硬,即如下情况: 在参考文献的位置引用排在第二个,但是在原文中是第一

    2024年02月06日
    浏览(29)
  • Verilog基本代码结构及常用语句always、begin...end解读

    在老板的要求下,我开始学习接触FPGA相关内容。而我们所用到的FPGA综合开发软件为vivado,虽然还没练习时长两年半,但也有一定的经验,接下来我把学习中遇到的问题记录如下,希望能帮助到刚入门的萌新。如果有一定的语言基础(例如c、matlab、Python等等),则搞懂以下问

    2024年02月05日
    浏览(44)
  • 使用贝叶斯滤波器通过运动模型和嘈杂的墙壁传感器定位机器人研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥   🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 使用

    2024年02月14日
    浏览(33)
  • 【前端 | CSS】align-items与align-content的区别

    CSS align-items 属性将所有直接子节点上的 align-self 值设置为一个组。align-self 属性设置项目在其包含块中在交叉轴方向上的对齐方式 align-items是针对每一个子项起作用,它的基本单位是每一个子项,在所有情况下都有效果; 目前,Flexbox 和 CSS 网格布局支持此属性。在 Flexbox 中

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包