题目背景

COCI

题目描述

有N个数排成一行(数值代表高度),最初所有的数都为零,你可以选择连续的一段等高的数,将它们都增加1(除了开头和结尾那个数)如下图表示了两次操作:

现在有一些数字看不清了,我们用-1表示,请你根据留下的数字,推出有多少 种可能的方案。使得留下的数字正好满足上面的操作方法。

输入输出格式

输入格式:

第一行一个正整数N表示数的个数。
接下来一行N个数,依次表示每一个数的大小,-1表示看不清楚,你可以用任
意满足条件的数代替。第i个数用hi​表示

输出格式:

一个数,表示所有可能的方案对1000000007求余的值。

输入输出样例

输入样例#1:

3
-1 2 -1
输出样例#1:

0
输入样例#2:

3
-1 -1 -1
输出样例#2:

2
输入样例#3:

6
-1 -1 -1 2 -1 -1
输出样例#3:

3

说明

  • (1≤N≤10000)
  • (−1≤hi≤10000)

Solution:

  本题DP(为啥本题是黑题?也许评黑题考得是思维吧~!)。

  首先由题意不难确定一些性质:

    1、合法情况首尾一定为0

    2、最高高度小于$n/2$

    3、由2可以确定的是第$i$位高度:当$i\leq n/2$,$h_i$最高为$i-1$; 当$i>n/2$,$h_i$最高为$n-i$

    4、由于每次选择的是一段长度大于2的相等且连续的序列,而操作使$(l,r)+1$,所以相邻两位之差$\in[-1,1]$

  然后就好做了。

  考虑普通dp,定义状态$f[i][j]$表示第$i$位高度为$j$的方案数,那么由性质1确定初状态$f[1][0]=1$,目标状态为$f[n][0]$。

  由性质4的邻位高度差绝对值$\leq 1$,不难得到状态转移方程:$f[i][j]=f[i-1][j-1]+f[i-1][j]+f[i-1][j+1]$

  转移时对于高度确定的就单次转移,否则就枚举可行高度并转移。

  这样定义状态会炸空间,但是每次转移只与前一个数的状态有关,所以直接滚掉就好了。

代码:

/*Code by 520 -- 9.4*/
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int mod=1e9+;
int n,a[],f[][],cnt,siz; int main(){
scanf("%d",&n);
For(i,,n) scanf("%d",&a[i]);
if(a[]>||a[n]>) cout<<,exit();
a[]=a[n]=,f[][]=,siz=;
while(siz<=n){
int up=siz;
if(siz>n/) up=n-siz+;
For(i,,up-) if(a[siz]==-||i==a[siz])
f[cnt][i]=((ll)(i?f[!cnt][i-]:)+f[!cnt][i]+f[!cnt][i+])%mod;
cnt^=,++siz;
memset(f[cnt],,sizeof(f[cnt]));
}
cout<<f[!cnt][];
return ;
}

P4622 [COCI2012-2013#6] JEDAN的更多相关文章

  1. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  2. SharePoint 2013: A feature with ID has already been installed in this farm

    使用Visual Studio 2013创建一个可视web 部件,当右击项目选择"部署"时报错: "Error occurred in deployment step ' ...

  3. Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目

    默认,在用vs2013开发SharePoint项目时,vs没有提供一般应用程序(.ashx)的项目模板,本文解决此问题. 以管理员身份启动vs2013,创建一个"SharePoint 201 ...

  4. SharePoint 2013 create workflow by SharePoint Designer 2013

    这篇文章主要基于上一篇http://www.cnblogs.com/qindy/p/6242714.html的基础上,create a sample workflow by SharePoint De ...

  5. Install and Configure SharePoint 2013 Workflow

    这篇文章主要briefly introduce the Install and configure SharePoint 2013 Workflow. Microsoft 推出了新的Workflow ...

  6. SharePoint 2013 configure and publish infopth

    This article will simply descript how to configure and publish a InfoPath step by step. Note: To con ...

  7. TFS 2013 培训视频

    最近给某企业培训了完整的 TFS 2013 系列课程,一共四天. 下面是该课程的内容安排: 项目管理     建立项目     成员的维护     Backlog 定义     任务拆分     迭代 ...

  8. Visual Studio 2013 Ultimate因为CodeLens功能导致Microsoft.Alm.Shared.Remoting.RemoteContainer.dll高CPU占用率的折中解决方案

    1.为什么Microsoft.Alm.Shared.Remoting.RemoteContainer.dll的CPU占用率以及内存使用率会那么高? 在Visual Studio 2013 Ultima ...

  9. 沙盒解决方案解决SharePoint 2013 以其他身份登陆的问题

    众所周知,SharePoint 2013没有像SharePoint 2010那样有一个叫"以其他身份登录"的菜单项. 当然解决方案也很多,比如你可以直接修改Welcome.ascx ...

随机推荐

  1. OpenCV人脸识别的原理 .

    OpenCV人脸识别的原理 . 在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: void GetImageRect(IplImage* orgImage, ...

  2. day 1类 对象 属性 方法

    1. 解决吃啤酒鸭的问题 第一种方式(面向过程): 1)养鸭子 2)鸭子长成 3)杀 4)作料 5)烹饪 6)吃 7)卒 第二种方式(面向对象): 1)找个卖啤酒鸭的人 2)给钱 交易 3)吃 4)胖 ...

  3. Zabbix学习之路(八)之自动化监控网络发现和主动注册

    1.网络发现  分两步走:创建发现规则(rule)和执行的动作(Action)(1)创建发现规则"Configuration"-->"Create discover ...

  4. TPO-17 C2 Reschedule part-time job in campus dining hall

    TPO-17 C2 Reschedule part-time job in campus dining hall 第 1 段 1.Listen to a conversation between a ...

  5. 二叉树的深度<java版>

    二叉树的结构 二叉树是比较常见的一种的一种数据结构. 首先看看二叉树的数据结构: //由左节点和右节点以及一个节点值构成 public class TreeNode{ TreeNode leftNod ...

  6. Tree Traversals Again(根据前序,中序,确定后序顺序)

    题目的大意是:进行一系列的操作push,pop.来确定后序遍历的顺序 An inorder binary tree traversal can be implemented in a non-recu ...

  7. Python 数据图表工具的比较

    Python 的科学栈相当成熟,各种应用场景都有相关的模块,包括机器学习和数据分析.数据可视化是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些. 幸运的是,过去 ...

  8. CSS3实现图片渐入效果

    很多网站都有那种图片渐入的效果,如:http://www.mi.com/minote/,这种效果用css3和一些js实现起来特别简单. 拿我之前做的页面来说一下怎么利用css3来实现图片渐入效果. 下 ...

  9. 通过Nrgok映射外网调试微信

    一.注册账号 注册地址:http://www.ngrok.cc/login 登录系统,新增域名 二.下载客户端,修改配置文件 修改ngrok.cfg auth_token值登录平台管理系统可查看 su ...

  10. Scrum立会报告+燃尽图(Beta阶段第二周第二次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2410 项目地址:https://coding.net/u/wuyy694 ...