Problem Statement

There are N squares arranged in a row. The squares are numbered 1, 2, , N, from left to right.

Snuke is painting each square in red, green or blue. According to his aesthetic sense, the following M conditions must all be satisfied. The i-th condition is:

  • There are exactly xi different colors among squares li, li+1, , ri.

In how many ways can the squares be painted to satisfy all the conditions? Find the count modulo 109+7.

Constraints

  • 1≤N≤300
  • 1≤M≤300
  • 1≤liriN
  • 1≤xi≤3

Input

Input is given from Standard Input in the following format:

N M
l1 r1 x1
l2 r2 x2
:
lM rM xM

Output

Print the number of ways to paint the squares to satisfy all the conditions, modulo 109+7.

Sample Input 1

3 1
1 3 3

Sample Output 1

6

The six ways are:

  • RGB
  • RBG
  • GRB
  • GBR
  • BRG
  • BGR

where R, G and B correspond to red, green and blue squares, respectively.

Sample Input 2

4 2
1 3 1
2 4 2

Sample Output 2

6

The six ways are:

  • RRRG
  • RRRB
  • GGGR
  • GGGB
  • BBBR
  • BBBG

Sample Input 3

1 3
1 1 1
1 1 2
1 1 3

Sample Output 3

0

There are zero ways.

Sample Input 4

8 10
2 6 2
5 5 1
3 5 2
4 7 3
4 4 1
2 3 1
7 7 1
1 5 2
1 7 3
3 4 2

Sample Output 4

108

    还是小清新dp比较好,写起代码来非常的令人身心愉悦233333
让我们设 f[j][k][u] 为最近出现三种颜色的位置为j,k,u的方案数,那么转移直接把随便一维变成当前枚举的i即可。
至于限制条件,我们只需要在i==r的时候把 (j>=l) + (k>=l) + (u>=l) != x 的 f[j][k][u] 设置成0即可。 看起来是O(N^4)的??? 实际上因为至少一维要是i-1或者i,所以复杂度实际上是O(N^3)的。
#include<cstdio>
#include<vector>
#define ll long long
using namespace std;
#define pb push_back
const int ha=1e9+7,maxn=305;
inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;}
int f[maxn][maxn][maxn],n,m,k,L,R,ans;
vector<int> g[maxn][4]; inline void update(int p){
for(int i=1;i<=3;i++)
for(int j=g[p][i].size()-1,l;j>=0;j--){
l=g[p][i][j]; for(int a=0;a<=p;a++)
for(int b=0;b<=p;b++)
for(int c=(a<p&&b<p)?p:0;c<=p;c++)
if((a>=l)+(b>=l)+(c>=l)!=i) f[a][b][c]=0;
}
} inline void dp(){
f[0][0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++)
for(int l=0,now;l<i;l++)
for(int u=(j<i-1&&l<i-1)?i-1:0;u<i;u++){
now=f[j][l][u];
ADD(f[i][l][u],now);
ADD(f[j][i][u],now);
ADD(f[j][l][i],now);
} update(i);
} for(int j=0;j<=n;j++)
for(int l=0;l<=n;l++)
for(int u=(j<n&&l<n)?n:0;u<=n;u++) ADD(ans,f[j][l][u]);
} int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&L,&R,&k);
g[R][k].pb(L);
} dp(); printf("%d\n",ans);
return 0;
}
 

AtCoder - 2567 RGB Sequence的更多相关文章

  1. Atcoder E - RGB Sequence(dp)

    题目链接:http://arc074.contest.atcoder.jp/tasks/arc074_c 题意:一共有3种颜色,红色,绿色,蓝色.给出m个要求l,r,x表示在区间[l,r]内要有x种不 ...

  2. 【arc074e】RGB Sequence(动态规划)

    [arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...

  3. [Arc074E] RGB Sequence

    [Arc074E] RGB Sequence Description 今天也在愉快地玩Minecraft!现在MM有一块1?N的空地,每个格子按照顺序标记为1到N.MM想要在这块空地上铺上红石块.绿宝 ...

  4. AtCoder Regular Contest 074 E:RGB Sequence

    题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_c 题目翻译 给你一行\(n\)个格子,你需要给每个格子填红绿蓝三色之一,并且同时满足\(m\ ...

  5. [AT2567] [arc074_c] RGB Sequence

    题目链接 AtCoder:https://arc074.contest.atcoder.jp/tasks/arc074_c 洛谷:https://www.luogu.org/problemnew/sh ...

  6. AtCoder AGC031D A Sequence of Permutations (群论、置换快速幂)

    题目链接 https://atcoder.jp/contests/agc031/tasks/agc031_d 题解 这居然真的是个找规律神题... 首先要明白置换的一些基本定义,置换\(p\)和\(q ...

  7. Atcoder(134)E - Sequence Decomposing

    E - Sequence Decomposing Time Limit: 2 sec / Memory Limit: 1024 MB Score : 500500 points Problem Sta ...

  8. AT2567-[ARC074C]RGB Sequence【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为\(n\)的包含三种颜色\(RGB\)的序列,\(m\)个限制\([l,r,k]\)表示 ...

  9. AT2567 RGB Sequence dp

    正解:计数dp 解题报告: 传送门! umm其实我jio得dp的题目的话就难在思想昂,,,知道状态知道转移就不难辣QAQ 所以就不说别的了直接写下思路放下代码就over辣QAQ 最基础的思想就是f[i ...

随机推荐

  1. 【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方块游戏 带权并查集

    这道题一开始以为是平衡树结果发现复杂度过不去,然后发现我们一直合并而且只是记录到最低的距离,那么就是带权并查集了,带权并查集的权一般是到根的距离,因为不算根要好打,不过还有一些其他的,具体的具体打. ...

  2. 【可持久化线段树?!】rope史上最全详解

    https://www.luogu.org/problemnew/show/P3919 看到上面链接中的题时,我在学会可持久化线段树的同时,第一次学会了一个非常屌(cai)的STL大法——rope!! ...

  3. 移动端浏览器touch事件的研究总结

    $("body").on("touchstart", function(e) {     e.preventDefault();     startX = e. ...

  4. Out of memory due to hash maps used in map-side aggregation解决办法

    在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4): -----Task ID:  task_201411191723_723592 ...

  5. JavaScript 页面间传值

    转自:http://blog.csdn.net/qq380107165/article/details/7330612 一:JavaScript静态页面值传递之URL篇 能过URL进行传值,把要传递的 ...

  6. codevs1063 合并果子 优先队列(小根堆)

    题目传送门 这道题很容易想到优先把两堆重量最小的合并比较优 然后乱搞一下就可以啦 #include<cstdio> #include<cstring> #include< ...

  7. Local Authentication Using Challenge Response with Yubikey for CentOS 7

    Connect Yubikey  ,then initialize YubiKey slot 2: ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt ...

  8. ZOJ 3599 K倍动态减法游戏

    下面的文字辅助理解来自http://blog.csdn.net/tbl_123/article/details/24884861 博弈论中的 K倍动态减法游戏,难度较大,参看了好多资料才懵懂! 此题可 ...

  9. Oracle基础 08 用户角色 user/role

    --查询帐户的状态select username,account_status from dba_users  where username='SCOTT'; --创建用户create user jo ...

  10. gcc升级方法

    https://www.cppfans.org/1719.html 默认链接到 /usr/local/bin/gcc,需要链接一下,替换默认的低版本 ln -s /usr/local/bin/gcc ...