Solved:1

rank:249

E. Removal

dp i,j表示前i个数删除了j个且选择了第i个的答案

类似字符串的dp 预处理一下nex i_k即i后面k第一次出现的位置  就好转移了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + ; int s[];
int nex[][];
int now[];
ll dp[][]; int main()
{
int n, m, kk;
while(~scanf("%d%d%d", &n, &m, &kk))
{
memset(dp, , sizeof(dp));
for(int i = ; i <= n; i++) scanf("%lld", &s[i]);
for(int i = ; i <= kk; i++) now[i] = n + ; for(int i = n; i >= ; i--)
{
for(int j = ; j <= kk; j++) nex[i][j] = now[j];
now[s[i]] = i;
} dp[][] = ; //dp[0][0] = 1;
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
{
if(!dp[i][j]) continue;
for(int k = ; k <= kk; k++)
{
int t = nex[i][k];
if(t == n + ) continue;
if(t - i + j - > m) continue;
(dp[t][t - i + j - ] += dp[i][j]) %= mod;
}
}
} ll ans = ;
for(int i = ; i <= n; i++)
if(i - n + m >= )
(ans += dp[i][i - n + m]) %= mod;
printf("%lld\n", ans);
}
return ;
}

最新文章

  1. [转]Android - 文件读写操作 总结
  2. C(++) Websocket实现扫码二维码登录---GoEasy
  3. REST API (from IBM)
  4. ecshop添加上传图片
  5. Linux------小网盘(1)
  6. asp.net core中Microsoft.AspNet.Session的使用
  7. Blog 入职新公司的一些吐槽!
  8. 有图有真相,分享一款网页版HTML5飞机射击游戏
  9. C# 线程知识--使用ThreadPool执行异步操作
  10. [置顶] 如何把你的笔记本电脑变成一个Wi-Fi路由器在Windows 7 &amp; 8?
  11. QT开发应用程序的欢迎界面
  12. LSTM编程所用函数
  13. cf1136E. Nastya Hasn&#39;t Written a Legend(二分 线段树)
  14. UVA1608-Non-boring sequences(分治)
  15. BZOJ5010 FJOI2017矩阵填数(容斥原理)
  16. [daily] 使用左右对比查看diff 格式的文件
  17. xsync
  18. python string tuple list dict 相互转换的方法
  19. Windows 作为 openssl server端时的处理
  20. JAVA基础之——Thrift原理及应用

热门文章

  1. Javascript基本概念梳理
  2. nRF52832之硬件I2C
  3. [计算机联网故障]WIFI接入正常,但是上网不正常(两种情况)
  4. lvm调整分区大小
  5. luogu2827 蚯蚓
  6. SPI操作flash MX25L64读写数据
  7. 【152】C# 操作 Excel 杂记
  8. 05_锅炉压力案例_java实现
  9. 用nginx进行同一个服务器下多域名的负载均衡配置
  10. php做APP接口开发,接口的安全性