求助,WA最后一个点
查看原帖
求助,WA最后一个点
403084
spark_minous楼主2022/5/1 21:24

RT,第11个测试点WA,求大佬差错

代码:

#include<bits/stdc++.h>
using namespace std;
const int INF=2e9+7;
const int N=510;
int dp[N][N];
int a[N],m[N],cost[N],n;
inline void init(){
	int cnt=0;
	for(int i=1;i<=n;i++){
		int j=i;
		int now=a[i];
		while(a[j]==now)
			j++;
		j--;
		m[++cnt]=j-i+1;
		cost[cnt]=now;
		i=j;
	}
	n=cnt;
}
int main(){
	scanf("%d", &n);
	for(int i=1;i<=n;i++){
		scanf("%d", &a[i]);
	}
	init();
	memset(dp,INF,sizeof(dp));
	for(int i=1;i<=n;i++){
		if(m[i]>=2)
			dp[i][i]=1;
		else
			dp[i][i]=2;
	}
	for(int i=2;i<=n;i++){
		for(int j=1;j<=n;j++){
			int k=i+j-1;
			if(k>n)
				continue;
			if(cost[j]==cost[k]){
				if(m[j]+m[k]>2){
					dp[j][k]=dp[j+1][k-1];
				}
				else{
					dp[j][k]=dp[j+1][k-1]+1;
				}
			}
			for(int s=j;s<=k;s++)
				dp[j][k]=min(dp[j][k],dp[j][s]+dp[s+1][k]);
		}
	}
	printf("%d\n", dp[1][n]);
	return 0;
}
2022/5/1 21:24
加载中...