对于本做法的疑问
  • 板块学术版
  • 楼主江山_远方
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/5/22 22:11
  • 上次更新2023/11/4 22:51:56
查看原帖
对于本做法的疑问
222849
江山_远方楼主2021/5/22 22:11

P4170[CQOI2007]涂色
看到此题口胡了一个思路,即先将同颜色的连续木板合并,再通过O(n2)O(n^2)的复杂度解决问题,于是便有了如下代码

#include<bits/stdc++.h>
using namespace std;
string s,S;
int n,j,f[4100][4100];
int main()
{
	cin>>s,s=" "+s;
	for(int i=1;i<s.size();i++)if(s[i]!=s[i-1])S=S+s[i];
	n=S.size(),S=" "+S;
	for(int i=1;i<=n;i++)f[i][i]=1;
	for(int l=1;l<=n;l++)
	for(int i=1;i<=n-l+1;i++)
	{
		j=i+l-1;
		f[i][j]=min(f[i+1][j]+1,f[i][j-1]+1);
		if(S[i]==S[j])f[i][j]=min(f[i][j],f[i+1][j-1]+1);
	}
	cout<<f[1][n];
	return 0;
} 

私以为思路正确,样例也正确,不料得分只有70。看过题解后理解了题解的DP思路,但对于我错误的原因始终无法理解,求各位大神给出反例或错误的原因,如果可以的话,能否修正该代码使其正确?感激不尽

2021/5/22 22:11
加载中...