其他分享
首页 > 其他分享> > 2021.07.17 P4170 染色(区间DP)

2021.07.17 P4170 染色(区间DP)

作者:互联网

2021.07.17 P4170 染色(区间DP)

[P4170 CQOI2007]涂色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重点:

1.目标状态可以由哪些状态转移过来。

题目:

每次可以改变一段连续区间的颜色,问最少需要几次可以吧颜色改为目标区间颜色。

分析:

在一段连续区间(l,r)内,如果l,r处颜色相同,则选择(l+1,r)以及(l,r-1)这两个区间内修改次数少的,如果不同,枚举区间内断点,将两个小区间内次数相加。

代码如下:

#include<bits/stdc++.h>
using namespace std;
string a;
int f[55][55];
int main(){
	cin>>a;
	int n=a.size();
	memset(f,0x3f3f3f3f,sizeof(f));
	for(int i=1;i<=n;i++)f[i][i]=1;
	for(int l=2;l<=n;l++){
		for(int i=1;i+l-1<=n;i++){
			int end=i+l-1;
			if(a[i-1]==a[end-1]){
				f[i][end]=min(f[i+1][end],f[i][end-1]);
				continue;
			}else{
				for(int k=i;k<=end;k++){
					f[i][end]=min(f[i][end],f[i][k]+f[k+1][end]);
				}
			} 
		}
	}
	cout<<f[1][n];
	return 0;
}

标签:颜色,2021.07,17,int,P4170,区间
来源: https://www.cnblogs.com/eleveni/p/15026400.html