DAY6 - T2
T2:
题目
题目描述
假设你有一条长度为 5 的木版,初始时没有涂过任何颜色。你希望把它的 5 个 单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为 5 的字符串表示这个目 标:RGBGR。
每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜 色。例如第一次把木版涂成 RRRRR,第二次涂成 RGGGR,第三次涂成 RGBGR, 达到目标。
用尽量少的涂色次数达到目标。
输入
输入仅一行,包含一个长度为 n 的字符串,即涂色目标。字符串中的每个字符都 是一个大写字母,不同的字母代表不同颜色,相同的字母代表相同颜色。
输出
仅一行,包含一个数,即最少的涂色次数。
样例
输入
AAA
输出
1
输入
BACAABCA
输出
5
输入
EASKAKNSOJGSLSLGTNFDMTSSKPOFGBPPLOSEILDKDMQJSCFOII
输出
36
数据
对于前 50%的数据,n<=3 
对于前 80%的数据, n<=8 
对于 100%的数据, n<=50
题解
40%
搜索
#include <bits/stdc++.h>
using namespace std;
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--) 
char c[20];
int b[20],a[20],n,ans;
void dfs(int x)
{
   bool tt=1;
   rep(i,1,n) if (a[i]==0) tt=0;
   if (x>ans) return;
   if (tt==1)
   {
   	 ans=min(ans,x);
   	 return;
   }
   int d[20];
   rep(i,1,n)
     rep(j,i,n)
     {
     	int t1=0;
     	bool t2=0;
     	rep(k,i,j) 
		  if (a[k]==0)
		  {
		  	if (t1==0) t1=b[k];
		  	else if (b[k]!=t1) t2=1;
		  }
		if (t2||t1==0) continue;
		memcpy(d,a,sizeof(a));
		rep(k,i,j) a[k]=b[k];
		dfs(x+1);
		memcpy(a,d,sizeof(d));
     }
}
int main()
{
	freopen("b.in","r",stdin);
	freopen("b.out","w",stdout);
	ios::sync_with_stdio(false);
	ans=1e9;
	cin>>c;
	n=strlen(c);
	rep(i,1,n) b[i]=c[i-1]-'A'+1;
	dfs(0); 
	cout<<ans<<endl;
	return 0;
}
100%
区间DP
#include <bits/stdc++.h>
using namespace std;
int N, f[52][52];
string a;
int main(){
	cin >> a;
	N = a.length();
    memset(f,1e9+10,sizeof(f));
	for(int i = 1;i <= N;i++){
		f[i][i] = 1;
	}
	for(int len = 2; len <= N; len++){
		for(int i = 1; i <= N - len + 1; i++){
			int head = i, tail = i + len - 1;
			if(a[head-1] == a[tail-1]){
					f[head][tail] = min(f[head + 1][tail], f[head][tail-1]);
					continue;
			}
			for(int k = head; k <= tail; k++){
				f[head][tail] = min(f[head][k] + f[k+1][tail], f[head][tail]);
			}
		}
	}
	cout << f[1][N];
} 
    没有未来的未来不是我想要的未来
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号