题意:我们现在位于(0,0)处,目标是走到(K,0)处。每一次我们都可以从(x,y)走到(x+1,y-1)或者(x+1,y)或者(x+1,y+1)三个位子之一。现在一共有N段线段,每条线段都是平行于X轴的。我们如果此时x是在这段线段之内的话,我们此时走到的点(x,y)需要满足0<=y<=Ci.现在保证一段线段的终点,一定是下一段线段的起点。问我们从起点走到终点的行走方案数。

dp方程比较显然:dp[i][j]+=dp[i-1][j]+dp[-1][j-1]+dp[i-1][j+1]

之后构造一个如下的矩阵即可:

110000..0

011100..0

...

000.....111

同时注意一下矩阵的初始化,因此WA了很多次....

#include<bits/stdc++.h>
using namespace std;
typedef __int64 LL;
const LL MODD=;
struct mat{
LL a[][];
void init(int t){
for(int i=;i<=t;i++)a[i][i]=;
}
void clear(){
memset(a,,sizeof(a));
}
};
int n;
LL k;
mat mul(mat x,mat y,int t){
mat h;
h.clear();
for(int i=;i<=t;i++)
for(int j=;j<=t;j++)
for(int k=;k<=t;k++){
h.a[i][j]+=(x.a[i][k]%MODD*y.a[k][j]%MODD)%MODD;
h.a[i][j]%=MODD;
}
return h;
}
mat pw(mat x,LL t,int l){
mat b;
b.clear();
b.init(l);
for(;t;t>>=,x=mul(x,x,l))
if(t&)b=mul(b,x,l);
return b;
}
int main(){
mat p,a,ans;
p.clear();
ans.clear();
for(int i=;i<=;i++)
for(int j=max(,i-);j<=min(i+,);j++)
p.a[i][j]=;
scanf("%d%I64d",&n,&k);
a.clear();
a.a[][]=;
bool flag=false;
for(int i=;i<=n;i++){
LL l,r;
int t;
scanf("%I64d%I64d%d",&l,&r,&t);
if(r>k){r=k;flag=true;}
ans=pw(p,r-l,t);
for(int j=t+;j<=;j++)a.a[j][]=;
ans=mul(ans,a,t);
for(int j=;j<=t;j++)a.a[j][]=ans.a[j][];
if(flag)break;
}
printf("%I64d\n",ans.a[][]);
return ;
}

最新文章

  1. as3绕过策略文件给视频截图
  2. 自己赚钱送女友iPhone做惊喜
  3. Amr and Chemistry CodeForces 558C(BFS)
  4. 解决 Android Studio 乱码问题
  5. Linux学习小结(转)
  6. 开通博客第一天 (先发一些android(java)常见异常信息
  7. JSP入门:介绍什么是JSP和Servlet(转)
  8. why do we need virtual methods in C++?
  9. redis单机主从搭建
  10. 将缓冲区的数字字符串转化成BCD码数据_INT PubNumericToBCDStr(_UCHR *pcNStr, _INT iNLen, _UCHR *pcBCDStr)
  11. webpack中实现按需加载
  12. ACCP8.0 HTML标签
  13. Arrays和String单元测试 20175301
  14. hdoj3138
  15. mysql启动报错 mysql InnoDB: Error: could not open single-table tablespace file
  16. python工具使用笔记
  17. Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
  18. 【GMT43智能液晶模块】例程十:DMA实验——存储器到存储器的传输
  19. 【转】ASP.NET Core MVC 配置全局路由前缀
  20. Luogu3825 NOI2017 游戏 2-SAT

热门文章

  1. POJ3264 (RMQのST解法)
  2. Codeforces 376C. Socks
  3. 2.安装Nginx
  4. 验证Oracle处理速度
  5. Android AsyncTask内部线程池异步执行任务机制简要分析
  6. &quot;use strict&quot;详解
  7. 通过jettymain启动项目
  8. 逆向知识第八讲,if语句在汇编中表达的方式
  9. spring+struts2+hibernate整合
  10. short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确。为何?