直接统计答案,令dp[i][j]表示前i个数最长的颜色各不相同后缀长度为j的方案数,如果一直令j<m,那么就相当于统计了方案数。

如何推出dp[i][j]呢?考虑i-1的最长前缀是多少:当小于j-1或等于j时,显然无法拼接成j;当等于j-1时,第i个位置就有m-j+1种方案;当大于j时,第i个位置对于每种都仅有一种方案。

综上,即$dp[i][j]=(m-j+1)\cdot dp[i-1][j-1]+\sum_{k=j+1}^{m-1}dp[i-1][k]$,计算时间复杂度为$o(n^{3})$,用后缀和维护一下。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,m,p,ans,sum[5001],f[5001];
4 int main(){
5 scanf("%d%d%d",&n,&m,&p);
6 f[0]=1;
7 for(int i=1;i<=n;i++){
8 for(int j=m-1;j;j--){
9 f[j]=((m-j+1LL)*f[j-1]+sum[j])%p;
10 sum[j]=(sum[j+1]+f[j])%p;
11 }
12 f[0]=0;
13 }
14 for (int i=1;i<m;i++)ans=(ans+f[i])%p;
15 printf("%d",ans);
16 }

最新文章

  1. [转]struts2处理.do后缀的请求
  2. Tomcat部署学习
  3. js从千分位格式
  4. csdn第九名
  5. NSArray block用法
  6. java+mysql实现保存图片到数据库,以及读取数据库存储的图片
  7. 【原创】如何构建MIPS交叉编译工具链
  8. 一些 CSS 框架
  9. android可拖动排序GridView实现
  10. 【第一篇】Volley的使用之json请求
  11. BZOJ 2179FFT快速傅立叶
  12. netty心跳机制测试
  13. oracle表的简单操作
  14. Entity Framework Core 2.1 Preview1 新增功能简介
  15. 信用卡3D验证相关资料
  16. JavaBean四个作用域范围
  17. 如何用命令行刷新,启用,禁用Magento2的缓存
  18. 新型DenseBody框架:一张照片获得3D人体信息
  19. 005.SMB之user级别配置
  20. windows 批处理-重命名

热门文章

  1. 在Windows Server 2012R2离线安装.net framework3.5
  2. C++学习 1 数组
  3. Java初步学习——2021.10.05每日总结,第五周周二
  4. CVPR2021提出的一些新数据集汇总
  5. 2021.1.23--vj补题
  6. Markdown Reference
  7. UltraSoft - Beta - Postmortem事后分析
  8. the Agiles Scrum Meeting 12
  9. Spring DeferredResult 异步请求
  10. Spring父子上下文的使用案例