大意: 长为$n$的数组, 每个位置范围$[0,3]$, $m$个限制$(l,r,x)$表示$[l,r]$内有$x$种数, 求方案数.

维护每个数字最后一次出现位置, 暴力$DP$

实现时有个技巧是把还没有选择的数位置设为$0$

#include <iostream>
#include <cstdio>
#include <queue>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 110, P = 998244353;
int n, m;
vector<pii> f[N];
int dp[N][N][N][N];
void add(int &x, int y) {x+=y;if (x>=P)x-=P;}
int main() {
int t;
cin>>t;
while (t--) {
cin>>n>>m;
REP(i,1,n) f[i].clear();
while (m--) {
int l,r,x;
cin>>l>>r>>x;
f[r].pb(pii(l,x));
}
int cur = 0, ans = 0;
dp[0][0][0][0] = 1;
REP(i,1,n) {
cur ^= 1;
REP(j,0,i) REP(k,0,j) REP(t,0,k) dp[cur][j][k][t]=0;
REP(j,0,i-1) REP(k,0,j) REP(t,0,k) {
int &r = dp[!cur][j][k][t];
if (!r) continue;
add(dp[cur][j][k][t],r);
add(dp[cur][i-1][j][k],r);
add(dp[cur][i-1][j][t],r);
add(dp[cur][i-1][k][t],r);
}
REP(j,0,i-1) REP(k,0,j) REP(t,0,k) {
for (auto u:f[i]) {
if (1+(j>=u.x)+(k>=u.x)+(t>=u.x)!=u.y) {
dp[cur][j][k][t] = 0;
}
}
if (i==n) add(ans,dp[cur][j][k][t]);
}
}
printf("%d\n", ans);
}
}

最新文章

  1. js对象的深度克隆
  2. 使用 FP-growth 算法高效挖掘海量数据中的频繁项集
  3. temp_web
  4. [荐]使用jQuery清空file文件域
  5. JPA入门案例详解(附源码)
  6. CodeForces 166B (凸包)
  7. 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)
  8. libsvm 之 easy.py(流程化脚本)注释
  9. ViewGroup源码部分解析
  10. Topo图
  11. hdu 5510 Bazinga KMP+尺取法
  12. 如何使用KMS激活win10和office
  13. html5中使用标签支持视频播放
  14. LeetCode_Search a 2D Matrix
  15. 从头开始学Java【1】
  16. 老李谈JVM内存模型
  17. google gflag使用方法举例
  18. bzoj3769 spoj 8549 BST again
  19. ubuntu下安装thrift
  20. PHP 重置数组为连续数字索引的几种方式

热门文章

  1. Go By Example-值类型
  2. TXMLDocument 的使用
  3. 富文本编辑器handyeditor,上传和预览图片的host地址不一样
  4. 真正解决方案:java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
  5. ISO/IEC 9899:2011 条款6.4.5——字符串字面量
  6. python线程池(转)
  7. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_04-Eureka注册中心-将服务注册到Eureka Server
  8. 清空表且id为0
  9. [MongoDB教程] 2.MongoDB的安装与使用
  10. Python之queue模块以及生产消费者模型