给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内有多少种上色方案,很明显的区间DP dp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数 0代表不上色,1代表上红色,2代表上蓝色 对于l-r区间,有3种情况 1.if(l+1==r) 说明就只有一对,那么dp[l][r][0][1]=1;         dp[l][r][1][…
题目链接: codeforces 149D Coloring Brackets 题目描述: 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选择:涂红色,涂蓝色,不涂色. 2,每对括号有且仅有其中一个被涂色. 3,相邻的括号不能涂相同的颜色,但是相邻的括号可以同时不涂色. 解题思路: 这个题目的确是一个好题,无奈我太蠢,读错题意.以为(())这样的括号序列在涂色的时候,第一个括号与第三个括号也可以看做是一对.这样的话还要统计合法的括号匹配数目,还…
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内有多少种上色方案,很明显的区间DP dp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数 0代表不上色,1代表上红色,2代表上蓝色 对于l-r区间,有3种情况 1.if(…
http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内有多少种上色方案 思路:dp[l][r][i][j]表示从l到r的长度且左右括号分别是i j的方案数 那么转移方程: 1:l+1=r时, dp[l][r][0][1]=1;       dp[l][…
题目链接:http://codeforces.com/problemset/problem/149/D 继续区间DP啊.... 思路: 定义dp[l][r][c1][c2]表示对于区间(l,r)来说,l用c1染色,r用c2染色的方案数. 那么: 1,如果括号l和括号r匹配(即括号l和r为一对括号)那么dp[l][r][c1][c2]+=dp[l+1][r-1][i][j](i与c1为不同的颜色,j与c2是不同的颜色,或i=0或j=0) 2,如果括号l和括号r不匹配,那么dp[l][r][c1][…
题目链接 Coloring Brackets 考虑树型DP.(我参考了Q巨的代码还是略不理解……) 首先在序列的最外面加一对括号.预处理出DFS树. 每个点有9中状态.假设0位不涂色,1为涂红色,2为涂蓝色. 0:0 0 1:0 1 2:0 2 3:1 0 4:1 1 5:1 2 6:2 0 7:2 1 8:2 2 其中1.2.3.6为有效的状态. DP的时候如果当前括号下没有子括号那么这个状态方案数为1. 先处理出第一对括号.然后处理接下来的括号. 拼接的时候如果出现()() 中间两个括号同时…
Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output Once Petya read a problem about a bracket sequence. He gave it much thought but didn't find a solution. Today you will…
题意: 给一个合法的括号序列,仅含()这两种.现在要为每对括号中的其中一个括号上色,有两种可选:蓝or红.要求不能有两个同颜色的括号相邻,问有多少种染色的方法? 思路: 这题的模拟成分比较多吧?两种颜色还有无色,用2个bit就可以表示了.然后就是各种转移,注意结果可能非常大,要取模后输出.转移主要是不让同颜色的括号在一起.处理时可以用DFS,在区间[L,R]中找到距离最远的所有合法括号,递归往下处理子问题,直到剩下一对括号直接处理就行了. //#include <bits/stdc++.h>…
题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1) 不匹配,i的匹配p一定在l和r之间,从p分开转移 听说用记忆化搜索比较快,可以像树形DP那样写记忆化搜索,也可以传统的四个参数那样写 用循环+条件判断,简化状态转移的枚举 注意细节 见代码 #include<iostream> #include<cstdio> #include&l…
题目链接:https://vjudge.net/problem/CodeForces-149D D. Coloring Brackets time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Once Petya read a problem about a bracket sequence. He gave it much tho…
题目链接: http://codeforces.com/problemset/problem/149/D D. Coloring Brackets time limit per test2 secondsmemory limit per test256 megabytes 问题描述 Once Petya read a problem about a bracket sequence. He gave it much thought but didn't find a solution. Toda…
题目大意 要求你对一个合法的括号序列进行染色,并且需要满足以下条件 1.要么不染色,要么染红色或者蓝色 2.对于任何一对括号,他们当中有且仅有一个被染色 3.相邻的括号不能染相同的颜色 题解 用区间dp[i][j][cl][cr]表示区间[i,j]被染色之后(第i个括号被染成cl色,第j个括号被染成cr色)的合法方案数 分为匹配和不匹配两种情况来处理,需要用到乘法原理,用记忆化比较好写~~~具体请看代码 代码: #include<iostream> #include<cstdio>…
里面会有一些数据结构优化 DP 的题目(如 XI.),以及普通 DP. *I. P3643 [APIO2016]划艇 题意简述:给出序列 \(a_i,b_i\),求出有多少序列 \(c_i\) 满足 \(c_i=-1\) 或 \(c_i\in[a_i,b_i]\),同时非 \(-1\) 的部分单调递增. 直到做到这题我才意识到我的 DP 水平有多菜. 注意到值域过大,于是对区间进行离散化,设离散化后的端点分别为 \(p_1,p_2,\cdots,p_c\).注意要将 \([a_i,b_i]\)…
CodeChef Factorial to Square (分块决策) Description 给定一个n,要求在[1,n]中删除一些数,并使剩下的数的乘积是一个完全平方数,同时要求乘积最大,求删除方案数. \(n\leq 3000\) Solution 首先要构造出最优解,考虑把所有数相乘,发现如果某个质因数出现的奇数次,那就必须要删掉一个.那么只用在[1,n]中把该质数删除即可,得到的就是乘积最大的完全平方数. 现在考虑构造方案. 要求被删除的数包含所有必删质因数,并且只能出现一次. 那么就…
luogu题目传送门! 首先,硬求可行方案数并不现实,因为不好求(去年考场就这么挂的,虽然那时候比现在更蒟). 在硬搞可行方案数不行之后,对题目要求的目标进行转换: 可行方案数 = 总方案数 - 不合格方案数. 题目多看几眼,(求最大最小方案数量这种套路),DP无疑. 首先考虑列的限制,发现若有不合法的列,则必然有且只有一列是不合法的:因为不可能有不同的两列数量都超过总数的一半. 于是发现列的合法限制数量可以如此计算:每行选不超过一个的方案数 (总数) -   每行选不超过一个,且某一列选了超过…
3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f[i][j]\)i位数j个1的方案数..不考虑天际线就是组合数... 比较坑的地方是本题求f要取模\(phi(1e7+7)\),然后它并不是质数... #include <iostream> #include <cstdio> #include <cstring> #inc…
Pascal's Travels Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description An n x n game board is populated with integers, one nonnegative integer per square. The goal is to travel along any legitimate pat…
染色有三个条件: 对于每个点来说要么不染色,要么染红色,要么染蓝色 对于每对配对的括号来说,有且只有一个一边的括号被染色 相邻的括号不能染成相同的颜色 首先可以根据给出的括号序列计算出括号的配对情况,具体来说就是第i个括号与R[i]个括号配对. 对于一个正规配对括号序列(correct bracket sequence),d(l, r, c1, c2)表示括号序列S[i]~S[j],i左边括号的颜色是c1,r右边的括号颜色是c2(0表示没有染色),这样的序列的染色方法数. 与S[i]配对的可能是…
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence, if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and if a and b are regular brackets…
题意:给一段左右小.中括号串,求出这一串中最多有多少匹配的括号. 解法:此问题具有最优子结构,dp[i][j]表示i~j中最多匹配的括号,显然如果i,j是匹配的,那么dp[i][j] = dp[i+1][j-1]+2; 否则我们可以分区间取最值.dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+1][j]); k在i,j之间. 代码: #include <iostream> #include <cstring> #include <algorithm…
 Coloring Brackets time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Once Petya read a problem about a bracket sequence. He gave it much thought but didn't find a solution. Today you will fa…
CF 983B XOR-pyramid(区间dp,异或) 若有一个长度为m的数组b,定义函数f为: \(f(b) = \begin{cases} b[1] & \quad \text{if } m = 1, \\ f(b[1] \oplus b[2],b[2] \oplus b[3],\dots,b[m-1] \oplus b[m]) & \quad \text{otherwise} \end{cases}\) 现在给出长度为n(n<=5000)的数组a,询问q(q<=1000…
https://www.luogu.org/problemnew/show/P3146 一道区间dp的题,以区间长度为阶段; 但由于要处理相邻的问题,就变得有点麻烦; 最开始想了一个我知道有漏洞的方程 ][j]) f[i][j] = max(f[i][k],f[k + ][j]); ); 可能f[i][k] = f[i][j],但他们可合并的并未相邻; 可以这样 #include <bits/stdc++.h> #define read read() #define up(i,l,r) for…
Arthur and Brackets 区间dp, dp[ i ][ j ]表示第 i 个括号到第 j 个括号之间的所有括号能不能形成一个合法方案. 然后dp就完事了. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int>…
标签: ACM 题目 Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is planning to attend as many parties as he can. Since it's Halloween, these parties are all costume parties, Gappu always selects his costumes in such…
题目链接:https://vjudge.net/problem/POJ-2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9630   Accepted: 5131 Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regu…
POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间DP,以为就是用栈进行模拟呢,可是发现就是不大对,后来想到是不是使用DP,但是开始的时候自己没有推出递推关系,后来实在想不出来看的题解,才知道是区间DP,仔细一想确实是啊. 下面就是状态转移方程: \[ \begin{cases}dp[i][j] &=& dp[i+1][j-1]+if(str…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4255 题目大意:在x轴上有n个客人,每个客人每分钟增加的愤怒值不同.给出客人和餐厅的位置,以及客人每分钟增加的愤怒值,和送餐行走一公里需要的时间,问送完n个客人的外卖最小愤怒值.解题思路:如果要访问完[i,j],那么它的子区间一定访问完了.用dp[i][j][0]表示访问完区间[i,j]并留在左端点,dp[i][j][1]表示访问完区间[i,j]并留在右端点.把饭店…
题意:有一个字符串 s. 这个字符串是一个完全匹配的括号序列.在这个完全匹配的括号序列里,每个括号都有一个和它匹配的括号 你现在可以给这个匹配的括号序列中的括号染色,且有三个要求: 每个括号只有三种情况,不上色,上红色,上蓝色. 每对括号必须只能给其中的一个上色,且必须给一个上色 相邻的两个不能上同色,可以都不上色 求满足条件的括号序列染色的方法数 假设不染色为0,另外两种色为1,2 那对于一个匹配的括号对来说,只允许(1,0),(2,0),(0,1),(0,2) 定义\(f[l][r][i][…
题意:有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值. 解题关键:区间dp,首先枚举区间,再枚举分割点,区间由小到大更新. 转移方程:$dp[l][r] = \min (dp[l][r],dp[l][i + 1] + dp[i + 1][r] + w[i][j])$ 复杂度:$O({n^3})$ 注意$dp[i][i] = 0$ 转载的比较好的一段理…