题目链接

BZ链接

其实dp只要把状态想好后转移就很好写了(flag*1)

f[i][j][k]表示到了第i行,有j列放了一个跑,有k列放了两个跑的方案总数

然后大力讨论,转移即可

# include<iostream>
# include<cstdio>
# include<algorithm>
# include<cmath>
# include<cstring>
const int mn = ;
const int mod = ;
int n,m,ans;
int f[mn][mn][mn];
int main()
{
scanf("%d%d",&n,&m);
f[][][]=;
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
for(int k=;k+j<=m;k++)
{
f[i+][j][k]=(f[i+][j][k]+f[i][j][k])%mod;
//什么都不放
if(j>=)
f[i+][j-][k+]=(f[i+][j-][k+]+1ll*f[i][j][k]*j%mod)%mod;
//在有跑的一行放一个跑
if((m-k-j)>=)
f[i+][j+][k]=(f[i+][j+][k]+1ll*f[i][j][k]*(m-k-j)%mod)%mod;
//在空地上放一个跑
if(j>=)
f[i+][j-][k+]=(f[i+][j-][k+]+1ll*f[i][j][k]*(j-)*j/%mod)%mod;
if((m-k-j)>=)
f[i+][j+][k]=(f[i+][j+][k]+1ll*f[i][j][k]*(m-k-j-)*(m-k-j)/%mod)%mod;
if((m-k-j)>= && j>=)
f[i+][j][k+]=(f[i+][j][k+]+1ll*f[i][j][k]*(m-k-j)*j%mod)%mod;
}
for(int i=;i<=m;i++)
for(int j=;j+i<=m;j++)
ans=(ans+f[n][i][j])%mod;
printf("%d",ans);
return ;
}

最新文章

  1. 用SQL语句创建四个表并完成相关题目-10月18日更新
  2. https
  3. css之position相对定位和绝对定位
  4. Office2007在安装、卸载过程中出错的解决办法
  5. 高效开发Android App的10个建议
  6. Web Service(一) 基础学习
  7. [Android Memory] Android Zipalign zip对齐优化app程序
  8. [php] PHP Fatal error: Class &#39;AMQPConnection&#39; not found
  9. MySql与SqlServer的一些常用用法的差别
  10. IOS 中的KVO模式 观察者模式
  11. Android IOS WebRTC 音视频开发总结(二一)-- 黑屏问题
  12. 怎么知道RTL Schematic中的instance与哪段代码对应呢
  13. (中等) UESTC 360 Another LCIS ,线段树+区间更新。
  14. JVM 体系结构
  15. Linux帮助手册(man)
  16. [js高手之路] es6系列教程 - 新的类语法实战选项卡
  17. Java之Frame
  18. 【Dubbo源码学习】负载均衡算法(2)-轮询算法的实现
  19. winform复制文件到指定目录
  20. 五.JQuary 实例

热门文章

  1. MySql存储过程批量给多个数据库中的同名表添加字段
  2. spring MVC4 配置详解(个人记录)
  3. std::map插入失败会返回什么
  4. fft模板 HDU 1402
  5. jquery全部选是,全部选否。
  6. OpenLayers使用symbolizers样式特征
  7. Linux学习(一):软链接和硬链接
  8. 学习Python笔记---列表简介
  9. java-日期类
  10. Breakpoint 断点只生效一次