题目链接: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符合颜色种类数加一

  1. #include <iostream>
  2. #include <cstring>
  3. #include <vector>
  4. #define mod 1000000007
  5. using namespace std;
  6. typedef long long ll;
  7. const int MAXN = 305;
  8. vector<pair<int , int> >vc[MAXN];
  9. int dp[MAXN][MAXN][MAXN];
  10. bool check(int r , int g , int b) {
  11. int k = max(r , max(g , b));
  12. int len = vc[k].size();
  13. for(int i = 0 ; i < len ; i++) {
  14. int l = vc[k][i].first , x = vc[k][i].second;
  15. int cnt = 0;
  16. if(r >= l) cnt++;
  17. if(g >= l) cnt++;
  18. if(b >= l) cnt++;
  19. if(cnt != x) return false;
  20. }
  21. return true;
  22. }
  23. int main() {
  24. int n , m;
  25. cin >> n >> m;
  26. for(int i = 0 ; i < m ; i++) {
  27. int l , r , x;
  28. cin >> l >> r >> x;
  29. vc[r].push_back(make_pair(l , x));
  30. }
  31. memset(dp , 0 , sizeof(dp));
  32. dp[0][0][0] = 1;
  33. ll ans = 0;
  34. for(int r = 0 ; r <= n ; r++) {
  35. for(int g = 0 ; g <= n ; g++) {
  36. for(int b = 0 ; b <= n ; b++) {
  37. if(!dp[r][g][b]) continue;
  38. if(!check(r , g , b)) {
  39. dp[r][g][b] = 0;
  40. continue;
  41. }
  42. int k = max(r , max(g , b));
  43. if(k == n) ans = (ans + (ll)dp[r][g][b]) % mod;
  44. dp[k + 1][g][b] += dp[r][g][b] % mod;
  45. dp[k + 1][g][b] %= mod;
  46. dp[r][k + 1][b] += dp[r][g][b] % mod;
  47. dp[r][k + 1][b] %= mod;
  48. dp[r][g][k + 1] += dp[r][g][b] % mod;
  49. dp[r][g][k + 1] %= mod;
  50. }
  51. }
  52. }
  53. cout << ans << endl;
  54. return 0;
  55. }

Atcoder E - RGB Sequence(dp)的更多相关文章

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

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

  2. atcoder A - Frog 1(DP)

    A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...

  3. Codeforces Beta Round #13 C. Sequence (DP)

    题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...

  4. cf13C Sequence(DP)

    题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证): ...

  5. Arithmetic Sequence(dp)

    Arithmetic Sequence Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 51  Solved: 19[Submit][Status][We ...

  6. atcoder B - Frog 2 (DP)

    B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...

  7. codeforces 486 E. LIS of Sequence(dp)

    题目链接:http://codeforces.com/contest/486/problem/E 题意:给出n个数,如果一个数满足不属于最长递增序列,那么输出1,如果属于最长递增序列但是不属于所有最长 ...

  8. URAL 1183 Brackets Sequence(DP)

    题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i] ...

  9. 【ZJOI2017 Round1练习】D8T2 sequence(DP)

    题意: 思路: #include <algorithm> #include <iostream> #include <cstring> #include <c ...

随机推荐

  1. AI and Robot

    Have you ever seen a movie called "Ex Machina"?  I like this movie very much. Artificial i ...

  2. Wtm携手LayUI -- .netcore 开源生态我们是认真的!

    经过WTM团队和LayUI团队多次深入协商,双方于2019年7月29日在北京中国国际展览中心正式达成战略合作意向, 双方签署了战略合作框架协议,LayUI团队承诺使用WTM框架的任何项目都可以免费使用 ...

  3. Python学习系列(三)Python 入门语法规则1

    一.注释 ''' 多行注释 ''' #单行注释 '''    #example1.1 测试程序  时间:4/17/2017 i1=input("请输入用户名:") i2=input ...

  4. react学习(二)--元素渲染

    元素用来描述你在屏幕上看到的内容: const element = <h1>Hello, world</h1>; 与浏览器的 DOM 元素不同,React 当中的元素事实上是普 ...

  5. Linux curl 表单登录或提交与cookie使用

    本文主要讲解通过curl 实现表单提交登录.单独的表单提交与表单登录都差不多,因此就不单独说了. 说明:针对curl表单提交实现登录,不是所有网站都适用,原因是有些网站后台做了限制或有其他校验.我们不 ...

  6. [转载]使用Java操作Mongodb

    HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mongodb,必须先 ...

  7. java中File IO流的笔记

    1.File文件的属性和操作 boolean exists( )  判断文件或目录是否存在boolean isFile( )  判断是否是文件boolean isDirectory( ) 判断是否是目 ...

  8. c# 读取 txt 文件中数据(int)

    今天在学图的算法做测试是,需要读取文本文件中的点坐标,本来很简单的事情,折腾了半天,记录一下找到的一种简单粗暴的解决方法,以便以后查看. 第一种方法 : StringReader string lin ...

  9. Zabbix-绘制动态拓扑图高级篇

    0.官网文档介绍: https://www.zabbix.com/documentation/4.0/manual/config/visualisation/maps/map 一.设备名字使用宏显示 ...

  10. NOIP前的模板复习和注意事项

    联赛除去今天刚好只有一个星期了,最后一个星期也很关键,要吃好睡好保持心情愉悦.当然也免不了最后的复习计划. 首先是模板,之前还有很多模板没有复习到,这些东西是一定要落实到位的. 每天往后面写一点... ...