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]…
[arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一个红绿蓝色出现的位置是哪里,发现显然\(i=max(j,k,l)\),所以只有三维了,直接\(dp\)即可.至于限制每次在右端点考虑一下就好了. #include<iostream> #include<cstdio> #include<vector> using names…
A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbered 1,2,…,N1,2,…,N. For each ii (1≤i≤N1≤i≤N), the height of Stone ii is hihi. There is a frog who is initially on Stone 11. He will…
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考虑:如果操作的次数最少,那么最终得到的不降的数列,必然是由原始数列中的数组成的,具体的证明可以使用反证法 知道了上面讲述的性质,这题就好搞了 先将原始数列(设为 A,共 n 个数)中所有的数去重并从小到达排序,保存在另一个数列中(设为 B,共 m 个数) 定义状态:f[i][j] 表示将原始数列中的…
题意: N个数.a1...aN. 对于每个数而言,每一步只能加一或减一. 问最少总共需要多少步使得新序列是非递减序列. N (1 ≤ N ≤ 5000) 思路: *一个还不知道怎么证明的结论(待证):最后的新序列b1...bN中的每一个数bi,一定是原a1..aN序列中的某个数. 将a1..aN从小到大排列,得到c1...cN. dp[i][j]:原序列前i个数经过操作,第i个数不超过c[j]所花最少步数. dp[i][j]=min( dp[i-1][j]+abs(a[i]-b[j]),dp[i…
Arithmetic Sequence Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 51  Solved: 19[Submit][Status][Web Board] Description Giving a number sequence A with length n, you should choosingm numbers from A(ignore the order) which can form an arithmetic sequ…
B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbered 1,2,…,N1,2,…,N. For each ii (1≤i≤N1≤i≤N), the height of Stone ii is hihi. There is a frog who is initially on Stone 11. He will…
题目链接:http://codeforces.com/contest/486/problem/E 题意:给出n个数,如果一个数满足不属于最长递增序列,那么输出1,如果属于最长递增序列但是不属于所有最长递增序列的输出2. 如果属于所有最长递增序列的输出3. 题解:这里要用点技巧,不妨设dpBefore[i]表示以第i位为结尾的最长递增序列长,dpAfter[i]表示以第i位为结尾的最长递增序列长. 然后只要满足dpBefore[i]+dpAfter[i]=len(len表示最长递增序列为多长用二分…
题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i][k]+dp[k+1][j](i<=k<j)}.输出的时候递归,其实我觉得输出比dp部分难多了..... #include <stdio.h> #include <string.h> #include <iostream> using namespace std…
题意: 思路: #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <map> using namespace std; , INF = -0x3f3f3f3f; int n, m, ans[N], v[N], a[N], last[N][N], f[N][N][N], g[N][…