每日一题<积木画>

简介: 每日刷题

image.png根据题目来看,要求所有的排列方法,由于整个积木只有两行因此比较简单一点。dp是一个二维数组分别表示列和当前积木画的状态。0为空,1为第二层有木板第一层没有,2为第一层有木板第二层没有,3为满。

其实说白了当前列为空即上一列是满的,由此dp[i][0] = dp[i-1][3],于是对dp的初始化便是dp[1][3] = 1,dp[1][0]= 1。

接着考虑dp[i][1]的状况,状态为1则说明当前列上行是没有木块而下层有,那么就有两种可能实现这个情况,

image.png

image.png

即可以换算成dp[i][1] = dp[i-2][3] + dp[i-1][1]。

而dp[i][2]则相反dp[i][2] = dp[i-1][0] + dp[i-1][1]。

dp[i][3]则有四种情况

image.png

image.png

image.png

image.png

由此dp[i][3] = dp[i-2][3] + dp[i-1][3] + dp[i-1][1] + dp[i-1][2]。

直接上源码

#include<iostream>
using namespace std;
int n;
long long dp[10000000][3];
#define mod 1000000007
int main()
{
  cin >> n;
  dp[0][3] = 1;
  dp[1][3] = 1;
  for (int i = 2; i <= n; i++)
  {
    dp[i][0] = dp[i - 1][3];
    dp[i][1] = (dp[i - 1][0] + dp[i - 1][2]) % mod;
    dp[i][2] = (dp[i - 1][0] + dp[i - 1][1]) % mod;
    dp[i][3] = (dp[i - 2][3] + dp[i - 1][3] + dp[i - 1][1] + dp[i - 1][2]) % mod;
  }
  cout << dp[n][3];
  return 0;
}

image.gif

目录
相关文章
|
JavaScript 人工智能
|
机器学习/深度学习 传感器 人工智能
FDF循环互助矩阵系统开发详细及功能丨FDF循环互助矩阵开发(稳定版)及源码
 人工智能产业链的基本内容包括基础层、技术层和应用层三个层次,基础层包括AI芯片,智能传感器,云计算,数据服务、5 G通讯;技术层包括机器学习,计算机视觉,算法理论,智能语音,自然语言处理等;
|
Java Shell
Codeforces Round #746 (Div. 2) D - Hemose in ICPC ?(交互 二分 欧拉序)
Codeforces Round #746 (Div. 2) D - Hemose in ICPC ?(交互 二分 欧拉序)
165 0
【1128】N Queens Puzzle (20分)【逻辑题】
【1128】N Queens Puzzle (20分)【逻辑题】 【1128】N Queens Puzzle (20分)【逻辑题】
126 0
|
算法 C++
利用动态规划算法解01背包问题-&gt;二维数组传参-&gt;cpp内存管理-&gt;堆和栈的区别-&gt;常见的内存错误及其对策-&gt;指针和数组的区别-&gt;32位系统是4G
1、利用动态规划算法解01背包问题 https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html 两层for循环,依次考察当前石块是否能放入背包。
1324 0
|
Java 应用服务中间件 容器
GlassFish移植Tips 来自&lt;美丽的爪哇岛&gt;的博客
GlassFish移植Tips  美丽的爪哇岛的博客地址: http://www.blogjava.net/askcuix/         最近,公司的GlassFish移植项目基本告以段落,由于之前的代码严重依赖于Weblogic,给移植工作带来了很大的难度,很多实现方式在GlassFish中根本就没有对应的替代品。
1272 0