UVA 12446 How Many... in 3D! 搭积木 dp

题目链接:点击打开链接

题意:

用1*1*2的方块搭出2*2*N的方块的方法数

则对于每一层有9种状态

0、全为1.

1、

00

__

0表示这个为空,__表示这两个平躺着一个方块

2、

00

11

0表示这格为空,1表示这格方块是直立放着的。

如此类推除第0种共8种状态,然后就是简单的转移。

而其他状态是无效的,不会参与到答案的计算中,所以不需要考虑

#include <string>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <map>
#include <vector>
template <class T>
inline bool rd(T &ret) {
	char c; int sgn;
	if(c=getchar(),c==EOF) return 0;
	while(c!='-'&&(c<'0'||c>'9')) c=getchar();
	sgn=(c=='-')?-1:1;
	ret=(c=='-')?0:(c-'0');
	while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
	ret*=sgn;
	return 1;
}
template <class T>
inline void pt(T x) {
    if (x <0) {
        putchar('-');
        x = -x;
    }
    if(x>9) pt(x/10);
    putchar(x%10+'0');
}

using namespace std;
const int N = 1000100;
const int mod = 1000*1000*1000+7;
void add(const int &y,int& x){
	x += y;
	if(x >= mod) x-=mod;
}
int d[N][9];
int main() {
	memset(d, 0, sizeof d);
	d[0][0] = 1;

	for(int i = 0; i < N-1; i++)
	{
		add(d[i][1], d[i][0]);
		add(d[i][2], d[i][0]);
		add(d[i][4], d[i][0]);
		add(d[i][5], d[i][0]);
		add(d[i][6], d[i][0]);
		add(d[i][8], d[i][0]);

		if(i>1)add(d[i-2][0], d[i][0]);

		add(d[i][0], d[i+1][1]);
		add(d[i][0], d[i+1][3]);
		add(d[i][0], d[i+1][5]);
		add(d[i][0], d[i+1][7]);

		add(d[i][1], d[i+1][4]);
		add(d[i][2], d[i+1][4]);
		add(d[i][3], d[i+1][2]);
		add(d[i][4], d[i+1][2]);

		add(d[i][5], d[i+1][8]);
		add(d[i][6], d[i+1][8]);
		add(d[i][7], d[i+1][6]);
		add(d[i][8], d[i+1][6]);

	}
	int T, n;scanf("%d", &T);
	while(T--){
		scanf("%d", &n);
		printf("%d\n", d[n][0]);
	}
	return 0;
}
时间: 2024-10-15 19:14:46

UVA 12446 How Many... in 3D! 搭积木 dp的相关文章

UC前端‘搭积木’的模块化开发——scrat.js

模块化开发 将模块所需的js\css\img\tmpl维护在一起,一个模块一个目录 js渲染模板 css只关心模块内样式 开发团队心声:"我们希望每次研发新产品不是从零开始,不同团队不同项目之间能有可复用的模块沉淀下来." 模块生态 每个工程有_工程模块_和_生态模块_. 生态模块:基于_component规范_开发,部署到Github上,可以通过命令行工具将Github上的模块安装到工程中使用.比如:jQuery, iscroll, zepto.js, vue.js 安装命令: sc

uva 11605 - Lights inside a 3d Grid(概率)

option=com_onlinejudge&Itemid=8&page=show_problem&problem=2652" style="">题目链接:uva 11605 - Lights inside a 3d Grid 题目大意:给定一个三维坐标系大小,每一个位置有一个灯.初始状态为关.每次随机选中两个点,以这两点为对角线的长方体内全部灯转变状态.操作K次.问说平均情况下.最后会有多少栈灯亮着. 解题思路:枚举坐标系上的点.计算单个点亮着

codevs 1255 搭积木 x

1255 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10) 比如下图N=13 H=6 M=2. 输入描述 Input Description 第一行为三个整数.N.H.M. 第二行以后每行一个整数K,-1为结束符. 输出描述 Output Description 第一行为满足N.H

外媒:智能手机影响幼儿脑发育 搭积木效果更好

据英国<卫报>网站2月2日报道,美国波士顿大学医学院的研究人员向人们敲响警钟,称大众深知电视和视频会对年幼儿童产生负面影响,然而在移动设备会对学龄前儿童大脑造成何种影响这一问题上,全社会普遍认识不足. 研究人员警告,使用平板电脑或智能手机来转移孩子的注意力可能会对他们的“社会情感发展”造成损害. “如果把这些设备作为安抚幼儿.转移他们注意力的主要方式,那他们还能建立自身的自我调节机制吗?”科学家问道. 研究人员还发现,三岁以下的幼儿如使用交互式屏幕还会削弱其学习数学和科学的能力. 波士顿大学医

搭积木(block)

[问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一些积木,其中第 i 个位置上叠了 a_i 块积木.小 OY 一开始会向小 C 指定 1..n 中的某个位置 s,然后,他在第 0 秒从位置s 出发,开始搭积木.他可以做这些动作:1.向左移动 1 个单位坐标,用时 1 秒.2.向右移动 1 个单位坐标,用时 1 秒.3.从当前位置顶部拿起一块积木,瞬

UVA 11605 - Lights inside a 3d Grid(概率+数学)

UVA 11605 - Lights inside a 3d Grid 题目链接 题意:给定一个NxMxP的三维网格,每个格子上一盏灯,现在每次随机选择两点,把这两点构成立方体中间那一块开关灯状态转换,问K步之后网格中亮灯的期望 思路:概率问题,把x,y,z轴分开考虑,算出每一个点xi,yi,zi分别能被选到的情况数,然后根据乘法原理相乘起来除以总情况就能算出一点的概率,然后问题就是K次了,对于K次,每次开到的概率为P的情况下,总情况为∑k1Pi(1?P)k?ii为奇数,那么根据组合公式很容易化

XJOI1657&amp;Codevs1255搭积木【树状动规】

搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行为三个整数.N.H.M.第二行以后每行一个整数K,-1为结束符. 输出格式: 第一行为满足N.H.M的积木搭建方案总数(1<=N<=540 H<=60 M<=10)以后每一行对于对应的K,给出顺序排列的第K种方案(最小的排列为第一种). 样例输入: 13 6 2 1 3 -1 样例输出

3249 搭积木

3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Petya有一个A×B×C的长方体积木,积木是有1×1×1的小积木块组成的.那么这个长方体的高为A,宽为B,长为C.(^-^哦亲,记住长方体的长不一定要比宽的数值大的哦). 现在好玩Petya在这个长方体中的的左上角挖去了一个(A-1)×(B-2)×(C-2)的小长方体.并且告诉你被挖去长方体的体积为n,即n=(A-1)×(B-2)×(C-2).现在问你被挖

codevs3249搭积木

3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Petya有一个A×B×C的长方体积木,积木是有1×1×1的小积木块组成的.那么这个长方体的高为A,宽为B,长为C.(^-^哦亲,记住长方体的长不一定要比宽的数值大的哦). 现在好玩Petya在这个长方体中的的左上角挖去了一个(A-1)×(B-2)×(C-2)的小长方体.并且告诉你被挖去长方体的体积为n,即n=(A-1)×(B-2)×(C-2).现在问你被挖