存个题解
  • 板块CF607B Zuma
  • 楼主添柴少年
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/14 19:13
  • 上次更新2024/10/14 19:21:36
查看原帖
存个题解
318022
添柴少年楼主2024/10/14 19:13
#include <bits/stdc++.h>
using namespace std;
const int N = 5e2 + 10;
int s[N];
int f[N][N];
int n;

int main(){
	cin >> n;
	memset(f, 0x3f, sizeof(f));
	for(int i = 1; i <=  n; i++){
		scanf("%d", &s[i]);
		f[i][i] = 1;      // L = 0
		if(s[i-1] == s[i])  // s[0] 空出来,一定不等于s[1],但不要紧,f[0][1]没有意义 
			f[i-1][i] = 1;   // L = 1
		else
			f[i-1][i] = 2;
	}
	for(int L = 2; L <= n - 1; L++){
		for(int i = 1; i + L <= n; i++ ){
			int j = i + L;
			if(s[i] == s[j])
				f[i][j] = min(f[i][j], f[i+1][j-1]);
			
			for(int k = i; k < j; k++){
				f[i][j] = min(f[i][j], f[i][k] + f[k+1][j]);
			}
		}
	}
	cout << f[1][n];
	return 0;
}

2024/10/14 19:13
加载中...