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. Bootstrap历练实例:按钮(Button)插件单个切换

    单个切换 如需激活单个按钮的切换(即改变按钮的正常状态为按压状态,反之亦然),只需向 button 元素添加 data-toggle="button" 作为其属性即可,如下面实例所 ...

  2. Linux MySQL 修改密码

    修改root本地登录密码 修改root默认的密码(方法一)1. 启动mysql之后systemctl start mysqld.service2. 修改mysql的配置文件 vi /etc/my.cn ...

  3. 用@vue/cli发布npm包

    1.环境准备 安装node,npm,@vue/cli 2.初始化项目 用@vue/cli创建新项目 vue create mtest-ui 删除public,main.js,App.vue等无关文件, ...

  4. Cannot read property 'tap' of undefined

    E:\vue-project\vue-element-admin-master>npm run build:prod vue-element-admin@3.8.1 build:prod E:\ ...

  5. abs的个人博客 http://abs001.top/blog

    abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 abs的个人博客 a ...

  6. 快速搭建lvs + keepalived + nginx

      环境:   VIP         192.168.2.224 LVS        192.168.2.217     centos7 nginx1    192.168.2.231     c ...

  7. build path导入的jar失效导致找不到类

    今天碰到一个很奇葩的问题,搞起我以后都不敢 build path到jar了 所以我就全部放到lib目录下了,因为之前使用build path导入的jar失效了,一直找不类,具体原因我也不清楚,我之前的 ...

  8. node操作mogondb数据库的封装

    注:摘自网络 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关于mongoose的安装就是 npm install -g mo ...

  9. JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密

    272. [NOIP2015模拟10.28B组]序章-弗兰德的秘密 (File IO): input:frand.in output:frand.out Time Limits: 1000 ms  M ...

  10. awk速查手册

    简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进 ...