val

题目描述

有一个值初始为0,接下来n次你可以令其在之前基础上+2或+1或-1。你需要保证,这个值在整个过程中达到的最大值减去达到的最小值不大于k,求方案数,模1,000,000,007。

输入

仅一行,两个空格隔开的正整数n和k。

输出

仅一行,一个非负整数,表示方案数对1,000,000,007取模后的结果。

样例输入

【输入样例A】
3 2
【输入样例B】
233 99

样例输出

【输出样例A】
11
【输出样例B】
316461264

提示

【评分标准】

对于10%的数据,n,k<=15;

对于30%的数据,n,k<=75;

对于50%的数据,n,k<=300;

对于另10%的数据,k=1;

对于100%的数据,n,k<=5,000。

来源

杭二noip2017模拟3


solution

考场只会n^4Dp,还MLE了

首先我们考虑枚举它的上界,算出下界,然后可以n^2Dp

f[i][j]表示前i次操作,和为j的方案数

if(j-1>=0)f[i][j]=(f[i][j]+f[i-1][j-1])%mod;
if(j-2>=0)f[i][j]=(f[i][j]+f[i-1][j-2])%mod;
if(j+1<=k)f[i][j]=(f[i][j]+f[i-1][j+1])%mod;

然后扣去重复的方案即可。

但这样效率仍然过不去。

我们可以把移动上下界看成移动起点。

初始是把所有点都看成起点,一起计算。

然后可以发现,相邻两点重复方案的计算,与整体是相同的。

那么所有点的重复方案就是0~k-1的Dp值。

效率O(n^2)

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 5005
#define mod 1000000007
using namespace std;
int n,k,f[maxn][maxn];
int main()
{
cin>>n>>k;
for(int i=0;i<=k;i++)f[0][i]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=k;j++){
if(j-1>=0)f[i][j]=(f[i][j]+f[i-1][j-1])%mod;
if(j-2>=0)f[i][j]=(f[i][j]+f[i-1][j-2])%mod;
if(j+1<=k)f[i][j]=(f[i][j]+f[i-1][j+1])%mod;
}
}
long long ans=0,aa=0;
for(int i=0;i<=k;i++)ans=(ans+f[n][i])%mod;
memset(f,0,sizeof f);
k--;
for(int i=0;i<=k;i++)f[0][i]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=k;j++){
if(j-1>=0)f[i][j]=(f[i][j]+f[i-1][j-1])%mod;
if(j-2>=0)f[i][j]=(f[i][j]+f[i-1][j-2])%mod;
if(j+1<=k)f[i][j]=(f[i][j]+f[i-1][j+1])%mod;
}
}
for(int i=0;i<=k;i++)aa=(aa+f[n][i])%mod;
ans=ans-aa;ans=(ans%mod+mod)%mod;
cout<<ans<<endl;
return 0;
}

val的更多相关文章

  1. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  2. 执行插入语句,object val = cmd.ExecuteScalar() val = null

    在写接口的过程中遇到错误:空对象不能转换为值类型 因为我们使用的是petapoco,经过调试后发现是 object val = cmd.ExecuteScalar() 这一句造成的报错, val = ...

  3. jquery的.html(),.text()和.val()方法

    新人一段时间没写前端代码就有点忘记了,现在来复习一下..html()方法 获取集合中第一个匹配元素的HTML内容 或 设置每一个匹配元素的html内容,具体有3种用法: .html() 不传入值,就是 ...

  4. 解密jQuery内核 DOM操作方法(二)html,text,val

    回顾下几组DOM插入有关的方法 innerHTML 设置或获取位于对象起始和结束标签内的 HTML outerHTML 设置或获取对象及其内容的 HTML 形式 看图对照区别 innerText 设置 ...

  5. .html(),.text()和.val()的差异总结

    .html(),.text(),.val()三种方法都是用来读取选定元素的内容:只不过.html()是用来读取元素的html内容(包括html标签),.text()用来读取元素的纯文本内容,包括其后代 ...

  6. html()、text()、val()、innerHTML、value()的区分

    以上的方法可用于一般的html标签(div)与input中分别进行讨论 1.html(): jQuery方法,用于一般标签中,可读写,可以获得写入html标签. 2.text(): jQuery方法, ...

  7. val()失效

    在表单设置了disabled或者readonlye,那么val()方会失效,可以采用$().attr('value','')

  8. .html(),.text()和.val()的差异总结:

    .html(),.text()和.val()的差异总结: 1.html(),.text(),.val()三种方法都是用来读取选定元素的内容:只不过.html()是用来读取元素的html内容(包括htm ...

  9. 关于jquery中html()、text()、val()的区别

    1. .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTML内容(包括其Html标签),.html()方法使用在多个元素上时,只读 ...

  10. jQuery的.html(),.text()和.val()的概述及使用

    本节内容主要介绍的是如何使用jQuery中的.html(),.text()和.val()三种方法,用于读取,修改元素的html结构,元素的文本内容,以及表单元素的value值的方法.jQuery中为我 ...

随机推荐

  1. eclipse中的字体大小设置和背景色设置

    1.字体大小设置 在basic下选择最后一个TextFont 护眼背景色设置 添加到自定义颜色后点确定 最后一步点apply

  2. Lepus天兔数据库监控系统安装配置

    [root@redis01 ~]# cd /opt/[root@redis01 opt]# wget https://www.apachefriends.org/xampp-files/5.6.36/ ...

  3. 虚拟机Linux_Mint中安装vmtools增强工具

    一开始用VmwarePro安装Linux系统时,系统的整体界面会缩在屏幕中间的一小块区域内.如图: ​ 看的会非常吃力.为了更好的解决这个问题,就需要安装Vmtools增强工具.安装步骤如下: 1. ...

  4. WireShark抓包命令

    本机环回包 在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己和自己通信.但是wireshark此时是无法抓取到数据包的,需要通过简单的设置才可以. 具体方法如 ...

  5. Openstack搭建(流水账)

    Openstack管理三大资源:1.网络资源2.计算资源3.存储资源 Keystone 做服务注册 Glance 提供镜像服务 Nova 提供计算服务 Nova scheduler决策虚拟主机创建在哪 ...

  6. OpenFaceswap 入门教程(3): 软件参数篇!

    OpenFaceswap 的使用可以说是非常简单,只要稍加点拨就可以学会,厉害一点的人根本不需要教程,直接自己点几下就知道了.看了前面安装篇和使用篇.我想大多数人应该会了. 当学会了使用之后,你可能对 ...

  7. jquery 省市区联动插件

    使用方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. Git add命令

    git add -A和 git add .   git add -u在功能上看似很相近,但还是存在一点差别 git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文 ...

  9. 查找两个链表的第一个交叉结点(Python实现)

    题目 给定两个单链表,查找这两个单链表的第一个交叉节点. 例如:链表list_a为:a1→a2→c1→c2→c3,链表list_b为:b1→b2→b3→c1→c2→c3.那么它们第一个交叉结点为c1. ...

  10. hdu 1257最少拦截系统

    最少拦截系统 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的 ...