题意:

  给出一个2*n的方格,当刷完某一个方格的漆后可以且只可以走到相邻的任何一格,即上 下 左 右 左上 左下 右上 右下。可以从任意一个格子开始刷墙,问有多少种刷法,因为随着n的增大方案数会变多,因此输出方案数mod 1000000007.

思路:

  dp[][2], dp[i][0]表示2*i的格子从第i列开始刷,最后回到该格子下面

         dp[i][1]表示2*i的格子从第i列开始刷,最后无法回到该格子下面

  状态转移方程是:dp[i][0] = 2*dp[i-1][0] 即 A1->B1->...->B2->A2, A1->B2->...->B1->A2,  A2也一样

          dp[i][1] = 2*(dp[i-1][0]+dp[i-1][1]) + 4*(dp[i-2][0]+dp[i-2][1])

    因为不能回到那一端,所以 一种情况是 1- >2  然后是dp1[i-1]+dp2[i-1],或者2->1  dp1[i-1]+dp2[i-1],所以乘以2。

或者可以1->3->2->4,1->4->2->3,2->3->1->4,2->4->1->3,所以乘以4。

初始状态:dp[0][0] = 1, dp[0][1] = 0, dp[1][0] = 2, dp[1][1] = 0;

       没有格子的情况下每个子涂所以回到该列只有一种情况,而回不到该列完全不可能。只有一列的情况下回到该列的方案数为2,即A1->A2, 或者A2->A1

  最后罗列出从第一列到最后一列的总共刷墙方案数。

  ans += 2*((dp[i-1][0]+dp[i-1][1])*dp[n-i][0])) + 2*((dp[n-i)[0]+dp[n-i][1])*dp[i-1][0])

        即从第i列开始刷,先刷右边的格子,有dp[n-i][0]种方案,因为要刷回来才可以刷左边的格子,然后再刷左边的格子,总共有(dp[i-1][0]+dp[i-1][1])种方案。同理可以先刷左边的格子再刷右边的格子

Tips:

  nothing?因为公式的推理比较重要..

Code:

 #include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = ;
const int mod = ; long long dp[MAXN][];
long long ans[MAXN] = {, }; void init()
{
dp[][] = , dp[][] = ;
dp[][] = , dp[][] = ;
for (int i = ; i < MAXN; ++i) {
dp[i][] = *dp[i-][]%mod;
dp[i][] = (*(dp[i-][]%mod+dp[i-][]%mod)%mod + *(dp[i-][]%mod+dp[i-][]%mod)%mod)%mod;
} for (int i = ; i < MAXN; ++i) {
ans[i] = (dp[i][]%mod+dp[i][]%mod)%mod;
ans[i] = (ans[i]*)%mod;
for (int j = ; j < i; ++j) {
ans[i] += (*((dp[j-][]+dp[j-][])%mod*dp[i-j][]%mod)%mod)%mod;
ans[i] += (*((dp[i-j][]+dp[i-j][])%mod*dp[j-][]%mod)%mod)%mod;
}
ans[i] %= mod;
} } int main()
{
int n;
init();
while (~scanf("%d", &n)) {
printf("%lld\n", ans[n]);
}
return ;
}

链接:http://acm.nbut.cn/Problem/view.xhtml?id=1476

蓝桥杯 【dp?】.cpp的更多相关文章

  1. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  2. 树形dp|无根树转有根树|2015年蓝桥杯生命之树

    2015年蓝桥杯第十题--生命之树(无根树dfs) ①暴力解法:枚举子集(选点) + dfs判断连通性(题目要求连通)满足上面两个条件下找出最大值权值和 ②dfs无根树转有根树,递归找最优 先学习无根 ...

  3. 梳理一下最近准备蓝桥杯时学习DP问题的想法

    学习时间不长,记录的只是学习过程的思路和想法,不能保证正确,代码可以在acwing上AC. 01背包问题: 1.首先是简单的01背包问题 2.先确定状态,f[i][j]表示有第i件物品,时间为j的最大 ...

  4. 2021蓝桥杯省赛B组(C/C++)E.路径【最短路DP】

    2021蓝桥杯省赛B组题目(C/C++)E.路径 最短路径, 因为变化情况比较多, 所以开始想的是深搜, 但是太慢了, 跑不出来, 后来就想着优化一下, 有的地方到另一个地方可能会考虑很多遍, 于是考 ...

  5. 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版

    2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...

  6. K好数--蓝桥杯

    JAVA版K好数--蓝桥杯 历经千辛万苦,也算是研究出来了这道题了. 这道题主要运用了动态规划(Dynamic Planning)的思想,何谓动态规划?其实就是将一个大问题分成一个个小问题,然后先通过 ...

  7. 蓝桥杯之K好数

    如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22.30.3 ...

  8. 第六届蓝桥杯软件类省赛题解C++/Java

    第六届蓝桥杯软件类省赛题解C++/Java 1[C++].统计不含4的数字统计10000至99999中,不包含4的数值个数.答:暴力循环范围内所有数字判断一下就是了,答案是52488 1[Java]. ...

  9. 蓝桥杯 0/1背包问题 (java)

      今天第一次接触了0/1背包问题,总结一下,方便以后修改.不对的地方还请大家不啬赐教! 上一个蓝桥杯的例题: 数据规模和约定 代码: import java.util.Scanner; public ...

  10. 2018年第九届蓝桥杯题目(C/C++B组)汇总

    第一题 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 解题思路: 1.  判断2月有几天, ...

随机推荐

  1. Java 23种设计模式详尽分析与实例解析之三--行为型模式

    Java设计模式 行为型模式 职责链模式 模式动机:职责链可以是一条直线.一个环或者一个树形结构.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理组织成一条链,并使请求链传递,由链上的处理者 ...

  2. C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)

    本节主要讲了函数重载的主要概念以及使用方法,还有C和C++的相互调用的准则和具体的工程中的使用技巧. 函数重载 1.基本概念 函数重载就是用同一个函数名来定义不同的函数.使用不同的函数参数来搭配同一个 ...

  3. C# webBrowser操作 javascript

    using System; using System.Windows.Forms; namespace Demo { public partial class Form1 : Form { publi ...

  4. 8天玩转并行开发——第二天 Task的使用

    原文 8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...

  5. JavaScript编程:浏览器对象模型BOM

    4.浏览器对象模型BOM: document.body.offsetwidth可以获取浏览器宽度. Window对象:          窗口操作:            1.moveBy(dx,dy ...

  6. hadoop学习;hadoop伪分布搭建

    先前已经做了准备工作安装jdk什么的,以下開始ssh免password登陆.这里我们用的是PieTTY工具,当然你也能够直接在linux下直接操作 ssh(secure shell),运行命令 ssh ...

  7. EasyUI - Tooltip 提示控件

    第一种: 效果: html代码: 不需要js代码,显示的是title中的内容. <div> <a href=</a> </div> 第二种: 效果: html ...

  8. Javascript实现简单的富文本编辑器

    <span style="font-size:14px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ...

  9. javascript创建类的6种方式

    javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...

  10. A Very Easy Triangle Counting Game

    题意:在圆上取n个点,相邻两个点之间连线,(注意,n和1相邻),然后所有点对(i ,i+2)相连,问能形成的不同的三角形有多少个? 思路:找规律 n=3,cnt=1; n=4,cnt=8; n=5 c ...