Atcoder E - RGB Sequence(dp)
题目链接:http://arc074.contest.atcoder.jp/tasks/arc074_c
题意:一共有3种颜色,红色,绿色,蓝色。给出m个要求l,r,x表示在区间[l,r]内要有x种不同的颜色。
问满足所有要求的染色方式一共有几种。
题解:一般问一共有几种组合方式要么推数学公式,要么就是dp。
不妨设dp[r][g][b]表示是k=max(r,g,b)前k个染色后r色结尾的位置为r,g色结尾的位置为g,b色结尾的位置为b。
显然转移为dp[k+1][g][b]+=dp[r][g][b],dp[r][k+1][b]+=dp[r][g][b],dp[r][g][k+1]+=dp[r][g][b];
然后就是如何判断这种情况是否可行。在询问的同时记录一下以r为结尾,上区间为l的,有x种颜色,可以用
vector<pair<int,int> >vc[MAXN]来存,然后check的时候只要判断r,g,b是否大于等于l符合颜色种类数加一
#include <iostream>
#include <cstring>
#include <vector>
#define mod 1000000007
using namespace std;
typedef long long ll;
const int MAXN = 305;
vector<pair<int , int> >vc[MAXN];
int dp[MAXN][MAXN][MAXN];
bool check(int r , int g , int b) {
int k = max(r , max(g , b));
int len = vc[k].size();
for(int i = 0 ; i < len ; i++) {
int l = vc[k][i].first , x = vc[k][i].second;
int cnt = 0;
if(r >= l) cnt++;
if(g >= l) cnt++;
if(b >= l) cnt++;
if(cnt != x) return false;
}
return true;
}
int main() {
int n , m;
cin >> n >> m;
for(int i = 0 ; i < m ; i++) {
int l , r , x;
cin >> l >> r >> x;
vc[r].push_back(make_pair(l , x));
}
memset(dp , 0 , sizeof(dp));
dp[0][0][0] = 1;
ll ans = 0;
for(int r = 0 ; r <= n ; r++) {
for(int g = 0 ; g <= n ; g++) {
for(int b = 0 ; b <= n ; b++) {
if(!dp[r][g][b]) continue;
if(!check(r , g , b)) {
dp[r][g][b] = 0;
continue;
}
int k = max(r , max(g , b));
if(k == n) ans = (ans + (ll)dp[r][g][b]) % mod;
dp[k + 1][g][b] += dp[r][g][b] % mod;
dp[k + 1][g][b] %= mod;
dp[r][k + 1][b] += dp[r][g][b] % mod;
dp[r][k + 1][b] %= mod;
dp[r][g][k + 1] += dp[r][g][b] % mod;
dp[r][g][k + 1] %= mod;
}
}
}
cout << ans << endl;
return 0;
}
Atcoder E - RGB Sequence(dp)的更多相关文章
- 【arc074e】RGB Sequence(动态规划)
[arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...
- atcoder A - Frog 1(DP)
A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- cf13C Sequence(DP)
题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...
- Arithmetic Sequence(dp)
Arithmetic Sequence Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 51 Solved: 19[Submit][Status][We ...
- atcoder B - Frog 2 (DP)
B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- codeforces 486 E. LIS of Sequence(dp)
题目链接:http://codeforces.com/contest/486/problem/E 题意:给出n个数,如果一个数满足不属于最长递增序列,那么输出1,如果属于最长递增序列但是不属于所有最长 ...
- URAL 1183 Brackets Sequence(DP)
题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i] ...
- 【ZJOI2017 Round1练习】D8T2 sequence(DP)
题意: 思路: #include <algorithm> #include <iostream> #include <cstring> #include <c ...
随机推荐
- hdu 6397 Character Encoding (生成函数)
Problem Description In computer science, a character is a letter, a digit, a punctuation mark or som ...
- 从原理层面掌握@SessionAttribute的使用【一起学Spring MVC】
每篇一句 不是你当上了火影大家就认可你,而是大家都认可你才能当上火影 前言 该注解顾名思义,作用是将Model中的属性同步到session会话当中,方便在下一次请求中使用(比如重定向场景~). 虽然说 ...
- 树莓派 + Windows IoT Core 搭建环境监控系统
前言:Windows IoT 是微软为嵌入式开发板设计的一种物联网操作系统,运行Windows UWP(C# 开发),可以设计出丰富的交互界面,驱动GPIO,连接一些传感器做有意思的事,本文详细介绍如 ...
- Java匹马行天下之J2EE框架开发——Spring—>用IDEA开发Spring程序(01)
一.心动不如行动 一.创建项目 *注:在IDEA中我创建的Maven项目,不了解Maven的朋友可以看我之前的博客“我们一起走进Maven——知己知彼”,了解Maven后可以看我之前的博客“Maven ...
- 消息中间件和JMS介绍(一)
在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B ...
- redhat linux 5.3安装activeMQ
安装环境:linux redhat enterprise 5.3 activemq版本:5.9.01.从http://activemq.apache.org/download.html地址下载apac ...
- 安装node.js、webpack、vue 和vue-cli 以及安装速度慢/不成功的解决方法
1.安装node.js 地址:https://nodejs.org/en/ 下载安装软件之后,点击下一步即可 打开dos窗口,输入cmd能快速打开,输入npm -v 和 node -v 能显示出版本 ...
- C#_会员管理系统
https://www.cnblogs.com/start-from-scratch/p/5420588.html
- UWP实现吸顶的Pivot
话不多说,先上效果 这里使用了一个ScrollProgressProvider.cs,我们这篇文章先解析一下整体的动画思路,以后再详细解释这个Provider的实现方式. 结构 整个页面大致结构是 & ...
- 12-Factor,构建原生软件应用方法论
官方地址:https://12factor.net/zh_cn/ 原则1:一份基准代码,多份部署 这个原则不管对微服务模式还是其他软件开发模式来说都非常基本,所以被列为12原则的第一条,该原则包括如下 ...