1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
using namespace std; #define fore(i,_a,_b) for(int i=(int)(_a);i<=(int)(_b);i++) #define forb(i,_a,_b) for(int i=(int)(_a);i>=(int)(_b);i--) #define fir first #define sec second #define SZ(a) (int)(a).size() #define pb push_back #define all(c) (c).begin(), (c).end() #define endl 'n' typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; const int INF=0x3f3f3f3f; const int mod=998244353; const int N=(int)102; vector<pii>lim[N];
ll dp[N][N][N][2];
int (){ int T; cin>>T; while(T--){ int n,m; scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) lim[i].clear(); for(int i=1;i<=m;i++){ int l,r,x; scanf("%d%d%d",&l,&r,&x); lim[r].pb({l,x}); } int now=1,pre=0; dp[0][0][0][pre]=1; for(int cur=1;cur<=n;cur++){ for(int k=0;k<max(cur,1);k++){ for(int j=0;j<max(k,1);j++){ for(int i=0;i<max(j,1);i++){ dp[i][j][k][now]=(dp[i][j][k][now]+dp[i][j][k][pre])%mod; dp[i][j][cur-1][now]=(dp[i][j][cur-1][now]+dp[i][j][k][pre])%mod; dp[i][k][cur-1][now]=(dp[i][k][cur-1][now]+dp[i][j][k][pre])%mod; dp[j][k][cur-1][now]=(dp[j][k][cur-1][now]+dp[i][j][k][pre])%mod; dp[i][j][k][pre]=0; } } } for(int k=0;k<max(cur,1);k++){ for(int j=0;j<max(k,1);j++){ for(int i=0;i<max(j,1);i++){ for(int p=0;p<(int)lim[cur].size();p++){ pii t=lim[cur][p]; if((k>=t.fir)+(j>=t.fir)+(i>=t.fir)+1!=t.sec){ dp[i][j][k][now]=0; } } } } } swap(now,pre); } ll ans=0; for(int k=0;k<max(n,1);k++){ for(int j=0;j<max(k,1);j++){ for(int i=0;i<max(j,1);i++){ ans=(ans+dp[i][j][k][pre])%mod; dp[i][j][k][pre]=0; } } } cout<<ans<<"n"; } return 0; }
|
近期评论