博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF R274 Div2 E Riding in a Lift DP
阅读量:5234 次
发布时间:2019-06-14

本文共 1443 字,大约阅读时间需要 4 分钟。

先预处理出能到当前点的区间,然后通过前缀和求得当前值即可。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define MP make_pair#define PB push_back#define lson rt << 1, l, mid#define rson rt << 1 | 1, mid + 1, rtypedef long long LL;typedef unsigned long long ULL;typedef vector
VI;typedef pair
PII;typedef pair
PDD;const int INF = INT_MAX / 3;const double eps = 1e-8;const double DINF = 1e60;const int maxn = 5005;const LL mod = 1e9 + 7;int n, a, b, k;int f[maxn][maxn], sum[maxn][maxn];int lbd[maxn], rbd[maxn];int mabs(int x) { return x < 0 ? -x : x;}int main() { cin >> n >> a >> b >> k; for(int i = 1; i <= n; i++) { lbd[i] = INF; rbd[i] = -INF; } for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(mabs(j - i) < mabs(j - b)) { lbd[i] = min(lbd[i], j); rbd[i] = max(rbd[i], j); } } } lbd[b] = rbd[b] = b; f[0][a] = 1; for(int i = 1; i <= n; i++) sum[0][i] = sum[0][i - 1] + f[0][i]; for(int i = 1; i <= k; i++) { for(int j = 1; j <= n; j++) { int l = lbd[j], r = rbd[j]; f[i][j] = (sum[i - 1][r] - sum[i - 1][l - 1] + mod) % mod; if(lbd[j] <= j && rbd[j] >= j) f[i][j] = (f[i][j] - f[i - 1][j] + mod) % mod; } for(int j = 1; j <= n; j++) sum[i][j] = (sum[i][j - 1] + f[i][j]) % mod; } cout << sum[k][n] << endl; return 0;}

 

转载于:https://www.cnblogs.com/rolight/p/4041631.html

你可能感兴趣的文章
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
[LintCode] 462 Total Occurrence of Target
查看>>
架构图-模型
查看>>
黑马程序员_Java基础枚举类型
查看>>
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
ajax向后台传递数组
查看>>
疯狂JAVA16课之对象与内存控制
查看>>
[转载]树、森林和二叉树的转换
查看>>
软件测试-----Graph Coverage作业
查看>>
django ORM创建数据库方法
查看>>
创建Oracle synonym 详解
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
linux查看端口占用
查看>>
Sql常见面试题 受用了
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>