状态f[i][j][k][l]表示前i个数,四种数的最后一次出现的位置分别是i、j、k和l(i>j>k>l),判断所有第右端点为i的区间是否满足此要求(不满足重置为0),考虑第i+1个位置填什么,转移到下一个位置上即可。

这样的时间复杂度看似是$o(Tn^{4})$,实际上由于枚举只需要比上一个数小就行了,还要除以24;空间复杂度通过滚动可以压到$o(n^{3})$,可以卡过去。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 998244353
4 int t,n,m,x,y,z,ans,ll[105][5],rr[105][5],f[2][105][105][105];
5 void add(int &x,int y){
6 x+=y;
7 if (x>=mod)x-=mod;
8 }
9 int calc(int a,int b,int c,int d,int e){
10 return (e<=a)+(e<=b)+(e<=c)+(e<=d);
11 }
12 int main(){
13 scanf("%d",&t);
14 while (t--){
15 scanf("%d%d",&n,&m);
16 memset(ll,0x3f,sizeof(ll));
17 memset(rr,-1,sizeof(rr));
18 for(int i=1;i<=m;i++){
19 scanf("%d%d%d",&x,&y,&z);
20 ll[y][z]=min(ll[y][z],x);
21 rr[y][z]=max(rr[y][z],x);
22 }
23 memset(f,0,sizeof(f));
24 f[0][0][0][0]=1;
25 ans=0;
26 for(int i=1,p=1;i<=n;i++,p^=1){
27 for(int j=0;(!j)||(j<i);j++)
28 for(int k=0;(!k)||(k<j);k++)
29 for(int l=0;(!l)||(l<k);l++){
30 x=f[p^1][j][k][l];
31 if (x){
32 add(f[p][j][k][l],x);
33 add(f[p][i-1][k][l],x);
34 add(f[p][i-1][j][l],x);
35 add(f[p][i-1][j][k],x);
36 }
37 f[p^1][j][k][l]=0;
38 }
39 for(int j=0;j<i;j++)
40 for(int k=0;(!k)||(k<j);k++)
41 for(int l=0;(!l)||(l<k);l++){
42 for(int q=1;q<=4;q++)
43 if ((calc(i,j,k,l,ll[i][q])>q)||(calc(i,j,k,l,rr[i][q])<q)){
44 f[p][j][k][l]=0;
45 break;
46 }
47 if (i==n)add(ans,f[p][j][k][l]);
48 }
49 }
50 printf("%d\n",ans);
51 }
52 }

最新文章

  1. JavaScript作用域
  2. MacTalk阅读有感
  3. CSS布局(二)
  4. 如何解决在Ue4编辑器中查看中文注释为乱码的情况
  5. Another app is currently holding the yum lock; waiting for it to exit...
  6. Aspect Oriented Programming (AOP)
  7. Extjs 4.2 Grid增删改及后台交互(Java)
  8. CK方程
  9. hysdk代码解析
  10. Android学习路线图
  11. Jquery列表中的导航菜单的应用
  12. HDU 1711 Number Sequence(kmp)
  13. oc学习之对象在内存的位置
  14. 利用python生成交换机的VRF配置文件
  15. JDBC、DBUtils
  16. Python3学习笔记(urllib模块的使用)
  17. C#基础知识总结(一)
  18. Django ORM模型:想说爱你不容易
  19. IIC AT24C02读写数据的一点小体会
  20. ubuntu 使用命令行登录oracle

热门文章

  1. 手把手教你 Docker部署可视化工具Grafana
  2. 洛谷4895 独钓寒江雪 (树哈希+dp+组合)
  3. 【数据结构与算法Python版学习笔记】图——拓扑排序 Topological Sort
  4. 【Linux命令063】Linux非常简单常用的入门命令
  5. the Agiles Scrum Meeting 3
  6. 洛谷 P2221 [HAOI2012]高速公路
  7. picGo+gitee搭建Obsidian图床,实现高效写作
  8. cf13C Sequence(DP)
  9. 转移指令原理和Inline Hook
  10. &#128293;完美解决ESlint+Prettier各项配置冲突的语法报错问题(新手向)