[ARC074C] RGB Sequence

Solution

显然是一道dpdpdp,我们发现直接维护当前状态有多少种颜色不好维护,因为颜色只有333种,所以可以直接记录每一种颜色最晚在哪里出现,令fi,j,k,lf_{i,j,k,l}fi,j,k,l​表示前iii个里RRR最晚在jjj,BBB最晚在kkk,GGG最晚在lll。

我们发现状态是O(n4)O(n^4)O(n4)的,但是显然有很多冗余状态,因为必然有一种颜色在iii,所以其中一维不用记录,直接用fi,j,kf_{i,j,k}fi,j,k​表示前iii个中一种颜色在iii,一种在jjj,一种在kkk,看情况转移即可。

对于限制(l,r,x)(l,r,x)(l,r,x),只需要把不满足条件的fr,j,kf_{r,j,k}fr,j,k​的值变为000即可。

时间复杂度O(n3+n2m)O(n^3+n^2m)O(n3+n2m)。

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=1e9+7;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
vector<PR> V[MAXN];
int f[305][305][305];
int upd(int x,int y) { return x+y>=mods?x+y-mods:x+y; }
signed main()
{int n=read(),m=read();for (int i=1;i<=m;i++){int l=read(),r=read(),x=read();V[r].PB(MP(l,x));}f[1][0][0]=3;for (int i=1;i<=n;i++)for (int j=0;j<i;j++)for (int k=0;k<i;k++) {for (auto v:V[i]) if ((i>=v.fi)+(j>=v.fi)+(k>=v.fi)!=v.se) f[i][j][k]=0;if (!f[i][j][k]) continue;f[i+1][j][k]=upd(f[i+1][j][k],f[i][j][k]);f[i+1][i][k]=upd(f[i+1][i][k],f[i][j][k]);f[i+1][j][i]=upd(f[i+1][j][i],f[i][j][k]);}int ans=0;for (int i=0;i<n;i++)for (int j=0;j<n;j++) ans=upd(ans,f[n][i][j]);printf("%d\n",ans);return 0;
}

[ARC074C] RGB Sequence(dp)相关推荐

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

    正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为nnn的包含三种颜色RGBRGBRGB的序列,mmm个限制[l,r,k][l,r,k][ ...

  2. LS 24 Bracket sequence(DP)

    Bracket sequence Given string s made up with (, ), ?, count the way to substitude ? with ( or ) to f ...

  3. [AT2567] [arc074_c] RGB Sequence

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

  4. poj 3017 Cut the Sequence(DP+单调队列)

    题意,给定一个序列,让你把它分割成N个子串,使得每个子串的和<=m并且每个子串的最大值加起来要最小. DP解:方程为 DP[i]=max(DP[i],DP[p-1]+ max(a[p]~~a[i ...

  5. (2017多校训练第四场)HDU - 6078 Wavel Sequence dp

    传送门:点击打开链接 定义状态dp[i][j][0]表示以a[i],b[j]结尾的且为波谷的情况总和,dp[i][j][1] 为波峰. 对于某个i,j满足a[i] == b[j],则dp[i][j][ ...

  6. 2017多校第4场 HDU 6078 Wavel Sequence DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6078 题意:求两个序列的公共波形子序列的个数. 解法: 类似于最长公共上升子序列,对于每个i,只考虑存 ...

  7. HDU 4915 Parenthese sequence DP

    [题目大意] 题目很短,自己读题吧. [思路] 其实是个很有意思的题. 在括号匹配中,当前的栈存的全是'('.那么,我们可以用dp[i][j]表示到了第i个字符,栈内存j个'('的方法数.这样显然是可 ...

  8. UVA 10534 Wavio Sequence DP LIS

    题意:求一个波浪子序列,就是是前一半是上升子序列,后一半是下降子序列(子序列的长度必须为奇数). 分别从左右两个方向求LIS,然后在统计最大值就行了 //#pragma comment(linker, ...

  9. AtCoder Beginner Contest 266(C- G)「判凸包」「dp」「期望」「基环树」「组合数」

    abc好好好. C - Convex Quadrilateral (atcoder.jp) 思路: 判凸包,向量叉积×=|a|*|b|*sin.叉积<0即角>180°. (可以勉勉强强算我 ...

最新文章

  1. 第9部分 备份与灾难恢复
  2. 已解决:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshaketimeout
  3. 【Python】简单的最优算法函数创建
  4. python os模块详细用法
  5. vue键盘事件:@keyup.down下方向键绑定事件
  6. serverless搭建html,基于ServerLess的极简网页计数器:源码分析与实践
  7. python可选参数定义_c#教程之定义可选参数
  8. php java 读取所有txt_paip.文件读写api php java python总结.txt
  9. spring-boot-starter-parent的主要作用
  10. JSEclipse安装后无法打开js文件_如何在你的 PC 上 下载并配置 Node.js
  11. mysql从字段取出地名_mysql中从字段中URL提取域名信息
  12. 山东大学软件学院计算机组成原理课程设计实验四
  13. Win10 KeilC51-C251-ARM共存方法
  14. mitmproxy配置证书以及浏览器证书
  15. 【JS】学习记录【页面打印】
  16. B2 - H - Historic Exhibition(二分图匹配+优化建图)
  17. wireshark过滤器使用
  18. 丁苯嵌段共聚物的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 深度学习中常用的骨干网络介绍
  20. cisco服务器修复模式,从映像损坏或缺失或 Rommon 模式中恢复 Cisco IOS Catalyst 4500/4000 系列交换机...

热门文章

  1. 编写程序在窗口中写出自己名字的拼音缩写_各类英文缩写:全称居然这么朴素?网友:最后一个我笑了...
  2. 它是世界上最轻的固体!1000℃下不会熔化,上过火星,还能进你家......
  3. 豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!
  4. c++中stringstream_文史哲与艺术中的数学_智慧树章节答案
  5. bpmn如何查看代码 idea_提高程序员效率的IDEA插件推荐(五大神器)
  6. python3默认的代码编码是什么-Python3 到底什么是字符编码
  7. okcoinapi开发代码_比特币程序化交易入门(5):WebSocket API
  8. android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...
  9. ajax上传文件 获取失败,Ajax上传文件/照片时报错TypeError :Illegal invocation的解决方法...
  10. 四川中级职称计算机考试考b级,四川省职称计算机B级考试1卷