扫雷

描述

相信大家都玩过扫雷的游戏。那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和他8连通的格子里面雷的数目。现在棋盘是n*2的,第一列里某些格子是雷,而第二列没有雷,如:
o 1
* 2
* 3
* 2
o 2
* 2
* 2 ('*'代表有雷,'o'代表无雷)
由于第一类的雷有可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息求第一列雷有多少中摆放方案。

格式

输入格式

第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<=N<=10000)

输出格式

一个数,即第一列中雷的摆放方案数。

样例1

样例输入1

2
1 1

样例输出1

2

限制

1s

来源

NOIP2006夏令营

题目链接:

  https://www.vijos.org/p/1193

题目大意:

  按照扫雷得规则,雷局为N*2的矩形,且雷只在第一列,第二列为第一列雷的分布数量。求满足第二列要求的第一列的雷的排列方案数

题目思路:

  【动态规划】

  f[i][j]表示第i,i+1行第一列的状态为j的方案数。j=00,01,10,11(0,1,2,3)

  通过枚举第i行的第二列为0,1,2,3来转移。

  初始值要枚举第一行第二列的0,1,2,3.

  可以将N*2的矩阵简化为循环矩阵。

 /****************************************************

     Author : Coolxxx
Copyright 2017 by Coolxxx. All rights reserved.
BLOG : http://blog.csdn.net/u010568270 ****************************************************/
#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define mem(a,b) memset(a,b,sizeof(a))
const double eps=1e-;
const int J=;
const int mod=;
const int MAX=0x7f7f7f7f;
const double PI=3.14159265358979323;
const int N=;
using namespace std;
typedef long long LL;
double anss;
LL aans;
int cas,cass;
int n,m,lll,ans;
int a[N];
int f[N][];
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
double x,y,z;
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%d",&n))
{
mem(f,);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
if(a[]==)f[][]=;
if(a[]==)f[][]=f[][]=;
if(a[]==)f[][]=;
for(i=;i<n;i++)
{
if(a[i]==)
{
f[i][]=f[i-][];
}
if(a[i]==)
{
f[i][]=f[i-][];
f[i][]=f[i-][];
f[i][]=f[i-][];
}
if(a[i]==)
{
f[i][]=f[i-][];
f[i][]=f[i-][];
f[i][]=f[i-][];
}
if(a[i]==)
{
f[i][]=f[i-][];
}
}
if(a[n]==)ans=f[n-][];
if(a[n]==)ans=f[n-][]+f[n-][];
if(a[n]==)ans=f[n-][];
printf("%d\n",ans);
}
return ;
}
/*
// //
*/

Vijos 1193 扫雷 【动态规划】的更多相关文章

  1. vijos p1193 扫雷

      描述 相信大家都玩过扫雷的游戏.那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里 ...

  2. Vijos 1404 遭遇战 - 动态规划 - 线段树 - 最短路 - 堆

    背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC ...

  3. 【动态规划】Vijos P1218 数字游戏(NOIP2003普及组)

    题目链接: https://vijos.org/p/1218 题目大意: 一个N个数的环,分成M块,块内的数求和%10,最后每块地值累乘,求最大和最小. n(1≤n≤50)和m(1≤m≤9)太小了可以 ...

  4. 【动态规划】Vijos P1493 传纸条(NOIP2008提高组第三题)

    题目链接: https://vijos.org/p/1493 题目大意: 二取方格数,从(1,1)向下或向右走到(n,m)走两次,每个走到的格子值只能被取一次所能取到的最大值. (n,m<=50 ...

  5. 【动态规划】Vijos P1143 三取方格数(NOIP2000提高组)

    题目链接: https://vijos.org/p/1143 题目大意: NxN的矩阵,每个值只能取一次,从(1,1)走到(n,n)走三次能取得的最大值. 题目思路: [动态规划] f[x1][y1] ...

  6. 【动态规划】Vijos P1121 马拦过河卒

    题目链接: https://vijos.org/p/1616 题目大意: 卒从(0,0)走到(n,m),只能向下或向右,不能被马一步碰到或走到马,有几种走法. 题目思路: [动态规划] 把马控制的地方 ...

  7. 【动态规划】Vijos P1616 迎接仪式

    题目链接: https://vijos.org/p/1616 题目大意: 长度为N的字符串,只含‘j’和‘z’,可以将任意两个字符调换K次,求能够拥有的最多的'jz'串. 题目思路: [动态规划] 首 ...

  8. 【动态规划】Vijos P1680 距离

    题目链接: https://vijos.org/p/1680 题目大意: 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“ab ...

  9. 【动态规划】【最长公共子序列】Vijos P1111 小胖的水果

    题目链接: https://vijos.org/p/1111 题目大意: 多组数据,给两个字符串s1,s2,求把s1,s2拆开从前往后合并后最短是多少 apple + peach = appleach ...

随机推荐

  1. 【makefile】symbol <函数> : can't resolve symbol 问题分析

    调试程序的时候,在linux编译器上可以编译通过,但是编译生成的firmware烧录到板子上的后出现以下异常: can't resolve symbol,无法解析元素符号. review一下code, ...

  2. assert.notStrictEqual()详解

    严格不相等测试,由不全等运算符确定(===). const assert = require('assert'); assert.notStrictEqual(1, 2); // OK assert. ...

  3. Codeforces 805 D Minimum number of steps

    题意: 给定一串字符串,将所有“ab”的子串替换为“bba”,询问多少次操作后没有子串“ab”. 分析: 观察可得,将“ab”替换为“bba”有两种结果. ①a移到了b的后面 ②增加了一个b 而且最终 ...

  4. Linux基础命令回顾

    前言 说到linux基础命令,网上一搜一箩筐,想学也有很多教程,如果你不幸看到此篇文章,想看就认真看完,毕竟你点进来了不是嘛? 我每次写的文章都是为了分享自己的学习成果或重要知识点,希望能帮助更多的人 ...

  5. spring 邮件服务

    https://www.cnblogs.com/ityouknow/p/6823356.html https://www.cnblogs.com/nfcm/p/7843935.html

  6. 单调队列&单调栈 基础

    参考博客https://www.cnblogs.com/tham/p/8038828.html 例题  poj 2823 Sliding Window Time Limit: 12000MS   Me ...

  7. Codeforces 799E(贪心)

    题意: 有n个物品,购买物品i需要花费ci的代价.Arkady和Masha分别有喜欢的物品. 现在需要从中选m个,使得这m个物品中至少有k个Arkady喜欢的物品,k个Masha喜欢的物品. 输出满足 ...

  8. SD卡 驱动层测速

    init_timer(&timer1); timer1.function = test_time; timer1.data = ; timer1.expires = jiffies + mse ...

  9. sonar做代码检测时如何忽略一些代码文件

    1.管理员登录sonar 2.如图 一条规则配置一个,不要填写逗号或者分号分割的多个规则

  10. linux内核CFS进程调度策略

    一.概述 首先简介一下主要的设计思路, CFS思路非常easy.就是依据各个进程的权重分配执行时间(权重怎么来的后面再说). 进程的执行时间计算公式为: 分配给进程的执行时间 = 调度周期 * 进程权 ...