40分求助qwq
查看原帖
40分求助qwq
417018
dark_moon楼主2022/8/10 14:40
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, a[N], f[205][205], ans = INT_MAX, s[N];
int main(){
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++){
		scanf("%d", &a[i]);
		a[i + n] = a[i];
//		f[i][i] = f[i + n][i + n] = a[i];
	}
	memset(f, 0x3f, sizeof(f));
	
	for(int i = 1; i <= 2 * n; i ++)
	s[i] = a[i] + s[i - 1], f[i][i] = 0;
	
	for(int i = 2; i <= n; i ++){
		for(int j = 1; j <= n; j ++){
			//j ~ j + i - 1
			for(int k = j; k < j + i - 1; k ++)
			f[j][j + i - 1] = min(f[j][j + i - 1], f[j][k] + f[k + 1][j + i - 1]);
			f[j][j + i - 1] += s[j + i - 1] - s[j - 1];
		}
	}
	for(int i = 1; i <= n; i ++)
	ans = min(ans, f[i][i + n - 1]);
	printf("%d\n", ans);
	
	memset(f, 0, sizeof(f));
	ans = -1;
	for(int i = 1; i <= 2 * n; i ++)
	f[i][i] = 0;
	
	for(int i = 2; i <= n; i ++){
		for(int j = 1; j <= n; j ++){
			//j ~ j + i - 1
			for(int k = j; k < j + i - 1; k ++)
			f[j][j + i - 1] = max(f[j][j + i - 1], f[j][k] + f[k + 1][j + i - 1]);
			f[j][j + i - 1] += s[j + i - 1] - s[j - 1];
		}
	}
	for(int i = 1; i <= n; i ++)
	ans = max(ans, f[i][i + n - 1]);
	printf("%d", ans);
	return 0;
}
2022/8/10 14:40
加载中...