题目背景

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. PHP 0817PHP 0817 (PHP, Exploit) writeup

    作为一只ctf小白,这个题看到之后真是丝毫没有思路.虽然能基本理解php,但还是没能顺利答出,最后直接进行了搜索. 虽然做技术,“固执”是优点.但是出于对自身自身情况的了解,我觉得现阶段看题解还是很有 ...

  2. TMS320VC5509驱动LCD1602

    1. 本次使用5509芯片的EMIF接口,先看下硬件的接口 LCD1602接口  RS(高电平1数据寄存器,低电平0指令寄存器) 接A2接口 LCD1602接口  RW(高电平读,低电平写) 接 AW ...

  3. 安装centos minimal 版本后安装setup包(linux)

    网络配置好后,输入命令 yum install setuptool,安装过程有两个确认,输入Y即可

  4. iOS 关于权限设置的问题

      在info.plist文件下添加 <key>NSContactsUsageDescription</key>    <string>请求访问通讯录</st ...

  5. Struts 2(三):示例→基于Struts 2的用户注册模块

    示例→基于Struts2的用户注册模块 1.用户注册模块需求描述 在用户注册页面中填写用户信息,包括用户名.用户密码.确认密码.姓名等信息,填写完成后提交注册表单给Struts 2的业务控制器Acti ...

  6. CTF--zip伪加密

    刷题 一.BUGKU WEB 1. 变量1 知识点php两个$$是 可变变量,就是一个变量的变量名可以动态的设置和使用 $GLOBALS一个包含了全部变量的全局组合数组.变量的名字就是数组的键 < ...

  7. vim神器(学习笔记)

    #本文并非原创,属于本人学习中的记录笔记或是转存笔记,如果涉及到哪位高人的创作权益,敬请海涵! Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持 ...

  8. Node开发项目管理工具 Grunt 对比 Gulp

    转自Gulp vs Grunt 1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Mav ...

  9. eBay推Winit海外仓 鼓励卖家拓展北美市场

    [亿邦动力网讯]2月11日消息,日前,跨境电商平台eBay与外贸电商服务商万邑通(Winit)合作,针对平台卖家推出了Winit美国海外仓,鼓励卖家拓展北美市场. 亿邦动力网获悉,Winit美国海外仓 ...

  10. loadrunner之analysis详解

    本文原出处:http://blog.csdn.net/lykangjia/article/details/56009750 一.常用到的性能测试术语 1.事务(Transaction) 在web性能测 ...