求条
查看原帖
求条
636442
yangyang1000楼主2024/3/1 14:04
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

int n,a[505],dp[505][505][5];

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	
	memset(dp,0x3f,sizeof(dp));
	for(int i=1;i<=n;i++)
		for(int j=0;j<3;j++) dp[i][i][j] = 3-j-1;
	
	for(int len=2;len<=n;len++)
		for(int i=1;i+len-1<=n;i++)
		{
			int j = i+len-1;
			
			for(int l=3-1;l>=0;l--)
			{
				if(l == 3 - 1)
					dp[i][j][l] = min(dp[i][j][l],dp[i+1][j][0]);
				else if(l < 3 - 1)
					dp[i][j][l] = min(dp[i][j][l],dp[i][j][l+1]+1);
				if(a[i] == a[i+1])
					dp[i][j][l] = min(dp[i][j][l],dp[i+1][j][min(3-1,l+1)]);
				for(int p=i+1;p<=j-1;p++)
					if(a[i] == a[p+1])
						dp[i][j][l] = min(dp[i][j][l],dp[i+1][p][0]+dp[p+1][j][min(3-1,l+1)]);
			}	
		}
	printf("%d",dp[1][n][0]);
 	return 0;
}

91pts WA #8

2024/3/1 14:04
加载中...