CF 538 D. Flood Fill 递归 区间DP】的更多相关文章

link:https://codeforces.com/contest/1114/problem/D 题意: 给定一个数组,有不同的颜色,你可以从任意一个位置开始,改变颜色,相邻的是同一种颜色的位子的颜色也要跟着改变,问最少需要改变几次颜色. 思路: 我一开始想的是去掉相邻重复后,假设有k个,那么答案就是k-1个,然后可以使结果更优的就是不相邻相同的,还能使结果更优的是一层再套一层相同的,就比如1,2,3,2,1.现场不知道怎么数这个套了几层,经过高人代码点拨,就是记忆化递归. #include…
任意门:http://codeforces.com/contest/1114/problem/D D. Flood Fill time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given a line of nn colored squares in a row, numbered from 11 to nn f…
D. Flood Fill 链接 题意: 一个颜色序列,每个位置有一个颜色,选择一个起始位置,每次可以改变包含这个位置的颜色段,将这个颜色段修改为任意一个颜色, 问最少操作多少次.n<=5000 分析: 区间dp. dp[i][j][0/1]表示当前的区间是l~r,把这一段变成一个颜色的最少次数,最后一个改变的颜色是最左边/最右边的一段. 代码: #include<cstdio> #include<algorithm> #include<cstring> #inc…
https://codeforces.com/contest/1114/problem/D 题目 给一串数字,首先选择一个位置,类似于画图,然后每一轮按照以下步骤: 可以将这个位置所在的连通块改成其他数字 问最少几步可以把所有数字变成一样的 题解 设dp[l][r][0/1]为把[l,r)范围变成和最左侧或最右侧数字一样需要的最少步数, 可以通过数学归纳证明 选择什么数字不重要,即使选择是中间的数字,步数一样不会变小 要注意的是有8种转移 $2\times2+2\times2$ 其中有4种转移肯…
#include<bits/stdc++.h>using namespace std;int a[5007];int dp[5007][5007];int main(){    int n; scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&a[i]);    n=unique(a+1,a+1+n)-a-1;    for(int i=n;i>=1;i--)…
题意 给定一串数字 相同的连续的数字可以同时 转换成一个相同数字 问最小几次可以全部转换成一个相同的数字 法1:区间dp  dp[l][r][0/1]  0表示l r区间转化成和最左边相同需要多少次 1表示转化成和最右边相同 区间dp即可 #include<bits/stdc++.h> #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++) #define MS(arr,arr_value) memset(arr,arr_…
题意:给你n个颜色块,颜色相同并且相邻的颜色块是互相连通的(连通块).你可以改变其中的某个颜色块的颜色,不过每次改变会把它所在的连通块的颜色也改变,问最少需要多少次操作,使得n个颜色块的颜色相同. 例如:[1, 2, 2, 3, 2]需要2步:[1, 2, 2, 3, 2] -> [1, 2, 2, 2, 2] -> [2, 2, 2, 2, 2]. 思路:我们先把颜色块压缩(即把本来颜色相同并且相邻的颜色块合并).容易发现,如果出现了形如[1, 2, 3, 1]这种情况, 那么显然先合并两个…
传送门: 解题思路: 区间Dp,发现某一个区间修改后区间颜色一定为左边或右边的颜色. 那么只需要设方程$f_(l,r,0/1)$表示区间$[l,r]$染成左/右颜色的最小代价 转移就是枚举左右颜色就好了,时间复杂度$O(n^2)$ 代码: #include<cstdio> #include<cstring> #include<algorithm> #define L 0 #define R 1 int n,n_; ]; ][][]; int main() { scanf…
You are given a line of nn colored squares in a row, numbered from 11 to nn from left to right. The ii-th square initially has the color cici. Let's say, that two squares ii and jj belong to the same connected component if ci=cjci=cj, and ci=ckci=ck …
给一个给定括号序列,给该括号上色,上色有三个要求 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][…