LYK 与实验室
2024-10-19 00:25:11
LYK 与实验室(lab)
Time Limit:5000ms Memory Limit:64MB
【题目描述】
LYK 在一幢大楼里,这幢大楼共有 n 层,LYK 初始时在第 a 层上。这幢大楼有一个秘密实验室,在第 b 层,这个实验室非常特别,对 LYK 具有约束作用,即若 LYK 当前处于 x 层,当它下一步想到达 y 层时,必须满足|x-y|<|x-b|,而且由于实验室是不对外开放的,电梯无法停留在第 b 层。LYK 想做一次旅行,即它想按 k 次电梯,它想知道不同的旅行方案个数有多少个。两个旅行方案不同当前仅当存在某一次按下电梯后停留的楼层不同。
【输入格式】(lab.in)
一行 4 个数,n,a,b,k。
【输出格式】(lab.out)
一个数表示答案,由于答案较大,将答案对 1000000007 取模后输出。
【输入样例 1】
5 2 4 1
【输出样例 1】
2
【输入样例 2】
5 2 4 2
【输出样例 2】
2
【输入样例 3】
5 3 4 1
【输出样例 3】
0
【数据范围】
对于 20%的数据 n,k<=5。
对于 40%的数据 n,k<=10。
对于 60%的数据 n,k<=500。
对于 90%的数据 n,k<=2000。
对于 100%的数据 n,k<=5000。
【题目分析】
令f[i][j]表示按过i次,当前停留在j层。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int mo=1e9+;
using namespace std;
int n,a,b,k;
int f[][];
long long ans=;
int ABS(int x)
{
return x<?-x:x;
}
int main()
{
freopen("lab.in","r",stdin);
freopen("lab.out","w",stdout);
scanf("%d%d%d%d",&n,&a,&b,&k);
f[][a]=;
for(int i=;i<=k;i++)
for(int j=;j<=n;j++)
if(j!=b)
for(int l=;l<=n;l++)
if(l!=b&&l!=j)
if(ABS(l-j)<ABS(l-b))
f[i][j]=(f[i][j]%mo+f[i-][l]%mo),
f[i][j]%=mo;
for(int i=;i<=n;i++)
if(i!=b)
ans=ans%mo+f[k][i]%mo;
cout<<ans%mo;
fclose(stdin);fclose(stdout);
return ;
}
考场60无优化
那我们考虑哪些层可以到达j层,这些层肯定是一个连续的区间,利用前缀和优化
最新文章
- Jquery,jquery-cookie.js 做的点击记住用户名和密码!
- 清空form表单
- 【局部特征】ASIFT
- Review 代码
- iOS开发网络篇—NSURLConnection基本使用(一)
- System占用端口80
- [经典算法] 字符串搜索Boyer-Moore
- JavaScript 高级程序设计 目录
- 类型与通用语言运行时:System.Object
- MySQLD 配置
- Emacs折腾经验谈
- easyui datagrid分页参数获取
- JS调用APP
- 抽象工厂模式--java代码实现
- 机器学习库--dlib
- ubuntu通过apt-get安装JDK8
- learning scala ide tools install
- Java ArrayList、string、string[]之间的转换
- Android O PackageInstaller 解析
- sql server 备份恢复效率
热门文章
- android中影藏状态栏和标题栏的几种方法
- TF255466: Team Foundation Server 的配置过程无法继续。以前的更新或安装需要重
- PAT乙级 1018. 锤子剪刀布 (20)
- pic计数
- sp_executesql的执行计划会被重用(转载)
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释
- Jquery中$(document).ready()与传统JavaScript中的window.onload方法的区别(2016/8/3)
- (转载)CSV 文件处理 PERL
- 在CentOS之上搭建VMware Player 7
- zepto.js + iscroll.js上拉加载 下拉加载的 移动端 新闻列表页面