主题链接:点击打开链接

意甲冠军:

特定 n a b k

构造一个长度k该序列。

使得序列中 对于随意两个相邻的数 | w[i-1] - w[i] | < | w[i] - b |

且第一个数 |a - w[1] | < | w[1] - b |

问:

有多少种不同的序列。

思路:dp

对于粗暴的dp复杂度是 n^3

我们能够用前缀和来优化掉一维的dp。。

反正是简单粗暴的题。详细看代码吧。。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 5005;
const ll mod = 1000000007;
int a, b, K, n;
ll dp[N][N], sum[N];
void put(int k){
printf("%d:", k);
for(int i = 1; i <= n; i++)pt(dp[k][i]),putchar(' '); puts("");
}
ll solve(){
dp[0][a] = 1;
for(int k = 1; k <= K; k++)
{
sum[0] = 0;
for(int i = 1; i <= n; i++) {
sum[i] = sum[i-1] + dp[k-1][i];
if(sum[i] >= mod) sum[i] -= mod;
}
for(int i = 1, j; i <= n; i++)
{
if(i==b)continue;
j = (b+i)>>1;
if(i < b)
{
if(b-j <= j-i) j--;
dp[k][i] = sum[j] - dp[k-1][i];
}
else
{
if(j-b <= i-j) j++;
dp[k][i] = sum[n] - sum[j-1] - dp[k-1][i];
}
if(dp[k][i] < 0){
dp[k][i] %= mod;
dp[k][i] += mod;
}
} }
ll ans = 0;
for(int i = 1; i <= n; i++){
ans += dp[K][i];
if(ans >= mod) ans -= mod;
}
return ans;
}
int main() {
while(cin>>n>>a>>b>>K){
memset(dp, 0, sizeof dp);
cout<<solve() % mod<<endl;
}
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

最新文章

  1. listview的用法
  2. linux 分区 物理卷 逻辑卷
  3. HTML与XHTML
  4. MAVEN修改localRepository不起作用
  5. Spark基础与Java Api介绍
  6. 配置nginx静态资源路径
  7. SQL学习之数据列去空格函数
  8. VirtualBox,Kernel driver not installed (rc=-1908)
  9. UVA 10881 - Piotr&#39;s Ants【模拟+思维】
  10. typeconfig.json配置说明
  11. openssl源代码结构
  12. JS 页面表格的操作
  13. 数据拆分之 垂直拆分 and 水平拆分
  14. Git系列:第七篇-Maven项目下提交时忽略不必要的文件或文件夹
  15. (后端)Sql Server日期查询-SQL查询今天、昨天、7天内、30天(转)
  16. eclipse 常用配置
  17. python之__call__()
  18. 团队开发工具git常用命令
  19. vim技巧4 删除/保留文本中匹配行
  20. js常用判断和语法

热门文章

  1. 64地点 Windows 8/7 根据系统 32地点PLSQL 耦合 64 地点 Oracle 11g
  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
  3. jQuery的理论基础
  4. ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)
  5. poj 2369 Permutations 更换水称号
  6. 远程连接到vultr vps的mysql服务器
  7. yum 简介及使用 安装、删除
  8. addChildViewController transitionFromViewController nib storyboard
  9. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
  10. 《编程简介(Java) &amp;#183;10.3递归思想》