[Arc074E] RGB Sequence
[Arc074E] RGB Sequence
Description
今天也在愉快地玩Minecraft!现在MM有一块1?N的空地,每个格子按照顺序标记为1到N。MM想要在这块空地上铺上红石块、绿宝石块和钻石块作为装饰。每个格子只能选择一种方块。MM有自己的审美标准。他定下了M条规定,每条规定形如(li,ri,xi),表示闭区间[li,ri]中,需要有恰好xi种不同的方块。MM觉得这个任务实在是太简单了,于是把它交给了你,但是你发现有太多种方式可以满足MM的审美需求了!于是你希望先知道,一共有多少铺方块的方法,可以满足MM的审美需求?答案对109+7取模
Input
第一行两个整数,N,M
接下来M行,每行三个整数li,ri,xi
Output
一个整数,对109+7取模后的答案
Sample Input
Case 1:3 1
1 3 3
Case 2:4 2
1 3 1
2 4 2
Case 3:1 3
1 1 1
1 1 2
1 1 3
Case 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
Case 1:6
Case 2:6
Case 3:0
Case 4:108
HINT
1≤N,M≤300
1≤li≤ri≤N
1≤xi≤3
试题分析
设\(f{i,j,k}\)表示填到第i位,另外两种颜色最后一次涂在\(\{j,k\}\)的方案数。
在右端点判断不合法情况,转移即可。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long
inline int read(){
int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int INF = 2147483600;
const int MAXN = 100010;
const int Mod = 1e9+7;
int N,M;
struct data{
int l,x; data(int ll=0,int xx=0){
l=ll; x=xx;
}
}; vector<data> vec[MAXN+1];
inline bool check(int i,int j,int k){
for(int l=0;l<vec[i].size();l++){
int cnt=1; if(vec[i][l].l<=j) ++cnt;
if(vec[i][l].l<=k) ++cnt;
if(cnt!=vec[i][l].x) return false;
} return true;
}int f[301][301][301];
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
N=read(),M=read();
for(int i=1;i<=M;i++){
int l=read(),r=read(),x=read();
vec[r].push_back(data(l,x));
} f[0][0][0]=1;
for(int i=0;i<N;i++){
for(int j=0;j<(i==0?1:i);j++){
for(int k=0;k<(j==0?1:j);k++){
if(!check(i,j,k)){f[i][j][k]=0; continue;}
(f[i+1][i][j]+=f[i][j][k])%=Mod;
(f[i+1][i][k]+=f[i][j][k])%=Mod;
(f[i+1][j][k]+=f[i][j][k])%=Mod;
}
}
} int ans=0;
for(int i=0;i<=N;i++){
for(int j=i+1;j<=N;j++)
if(check(N,j,i)) (ans+=f[N][j][i])%=Mod;
}if(check(N,0,0)) (ans+=f[N][0][0])%=Mod;
printf("%d\n",ans);
return 0;
}
[Arc074E] RGB Sequence的更多相关文章
- 【arc074e】RGB Sequence(动态规划)
[arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...
- 【ARC074e】RGB sequence
Description 一排\(n\)个格子,每个格子可以涂三种颜色的一种.现在给出\(m\)个形如"\([l,r]\)中必须恰好有\(x\)种颜色"的限制(\(1 \le l ...
- 【arc074e】RGB Sequence dp
Description 丰泽爷今天也在愉快地玩Minecraft! 现在丰泽爷有一块1∗N1∗N的空地,每个格子按照顺序标记为11到NN.丰泽爷想要在这块空地上铺上红石块.绿宝石块和钻石块作为 ...
- AtCoder - 2567 RGB Sequence
Problem Statement There are N squares arranged in a row. The squares are numbered 1, 2, …, N, from l ...
- AT2567-[ARC074C]RGB Sequence【dp】
正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为\(n\)的包含三种颜色\(RGB\)的序列,\(m\)个限制\([l,r,k]\)表示 ...
- AT2567 RGB Sequence dp
正解:计数dp 解题报告: 传送门! umm其实我jio得dp的题目的话就难在思想昂,,,知道状态知道转移就不难辣QAQ 所以就不说别的了直接写下思路放下代码就over辣QAQ 最基础的思想就是f[i ...
- [AT2567] [arc074_c] RGB Sequence
题目链接 AtCoder:https://arc074.contest.atcoder.jp/tasks/arc074_c 洛谷:https://www.luogu.org/problemnew/sh ...
- ARC074 E RGB Sequence DP
---题面--- 题解: 首先,有一个不太直观的状态,f[i][j][k][l]表示DP到i位,三种颜色最后出现的位置分别是j, k, l的方案数.因为知道了三种颜色最后出现的位置,因此也可以得知以当 ...
- AtCoder Regular Contest 074 E:RGB Sequence
题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_c 题目翻译 给你一行\(n\)个格子,你需要给每个格子填红绿蓝三色之一,并且同时满足\(m\ ...
随机推荐
- CSS animation怎么使用?(山东数漫江湖)
animation可以为很多CSS属性添加动画,比如: color, background-color, height和width.animation的动画需要使用@keyframes来定义,随后被a ...
- Java21个基础知识点
类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件.在Java中,类装载器把一个类装入JVM中,要经过以下步骤: (1) 装载:查找和导入Class文件: (2) 链接:把类的二进制 ...
- Collection包结构,与Collections的区别
Collection 1.Collection是集合类的顶级接口: 2.实现接口和类主要有Set.List.LinkedList.ArrayList.Vector.Stack.Set: Collect ...
- device tree property ---- interrupt-names
device tree source 的 interrupt-names property 會對應到 pltform_get_irq_byname() 的第二個參數. .dtsi or .dts in ...
- 使用UpdatePanel时FileUpload失效的问题
出处:http://www.cnblogs.com/caicainiao/archive/2010/12/08/1900377.html 1.使用UpdatePanel后,FileUpload的Has ...
- 【uva10779】收集者的难题
按照题意建模就行了. #include<bits/stdc++.h> #define naive 0 #define inf 1000000007 using namespace std; ...
- 生命周期(vue的钩子函数)
生命周期图示 创建前,创建后,挂载前,挂载后,更新前,更新后,销毁前,销毁后 beforeCreate:function(){ console.log('1-beforeCreate 组件还未被创建' ...
- Leetcode 之Length of Last Word(38)
做法很巧妙.分成左右两个对应的部分,遇到左半部分则入栈,遇到右半部分则判断对应的左半部分是否在栈顶.注意最后要判断堆栈是否为空. bool isValid(const string& s) { ...
- agc016D - XOR Replace(图论 智商)
题意 题目链接 给出两个长度为\(n\)的数组\(a, b\) 每次可以将\(a\)中的某个数替换为所有数\(xor\)之和. 若\(a\)数组可以转换为\(b\)数组,输出最少操作次数 否则输出\( ...
- python_day7学习笔记
类 1)创建一个类 #coding=utf-8 __author__ = 'Administrator' class Employee: '所有员工的基类' empCount = 0 def __in ...