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. share-Nothing原理

    Share nothing理论在数据库设计和优化中的实践应用 首先介绍share nothing概念.最早接触它是在 DataBaseManagentSystem一书的并行数据库章节中. 并行数据库要 ...

  2. Why is the ibdata1 file continuously growing in MySQL?

    We receive this question about the ibdata1 file in MySQL very often in Percona Support. The panic st ...

  3. [lucene系列笔记2]在eclipse里初步使用lucene的索引和查询功能

    首先,new一个java project,名字叫做LuceneTools. 然后,在project里new一个class,名字叫做IndexFiles.这个类用来给文件建索引(建好索引以后就可以高效检 ...

  4. HDU 多校对抗赛 A Maximum Multiple

    Maximum Multiple Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. c++ 公有继承的赋值兼容规则

    赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代.通过公有继承,派生类得到了基类中除构造函数.析构函数之外的所有成员,而且所有成员的访问控制属性也和基类完全相同.这样,公有派生 ...

  6. react 记录:React Warning: Hash history cannot PUSH the same path; a new entry will not be added to the history stack

    前言: react-router-dom 4.4.2 在页面中直接使用 import { Link } from 'react-router-dom' //使用 <Link to={{ path ...

  7. IE9,IE10 CSS因Mime类型不匹配而被忽略问题 (转)

    写页面的时候在chrome,fireforks等页面上显示正常,但是换成IE9,IE10之后就完全没有样式了,报错信息是CSS 因 Mime 类型不匹配而被忽略,下面与大家分享下这个问题的相关的回答 ...

  8. Linux引导过程

    早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行 ...

  9. 基于js的地理数据的几何运算turfjs

    Doc: http://turfjs.org/static/docs/global.html Openlayers3 Sample: http://jsfiddle.net/d6o81vc7/

  10. bugscan泄露代码解密

    #{文件名:decode key} dekey_dict= {'expback_64pyc_dis.py': 'ef632082c7620cf54876da74a1660bfb9c06eb94549b ...