巨佬们救救孩子吧
查看原帖
巨佬们救救孩子吧
1267690
crl0607楼主2025/1/22 21:47
#include<bits/stdc++.h>

using namespace std;

const int maxn = 1e3+10;
int a[maxn],f[maxn][maxn],g[maxn][maxn],sum[maxn],sum1[maxn];

int minn(int a,int b) {
	return a < b?a:b;
}

int main() {
	int n;
	cin >> n;
	for(int i = 1;i <= 2*n;i++) {
		for(int j = 1;j <= 2*n;j++) {
			g[i][j] = 1e9+10;
		}
	}
	for(int i = 1;i <= n;i++) {
		cin >> a[i];
	}
	for(int i = n+1;i <= 2*n;i++) {
		a[i] = a[i-n];
	}
	for(int i = 1;i <= 2*n;i++) {
		sum[i] = a[i] + sum[i-1];
		sum1[i] = a[i] + sum1[i-1];
		cout << sum[i] << endl;
	}
	for (int len = 2; len <= n; len++) {
		for (int i = 1; i <= 2 * n - len; i++) {
    		int j = len + i - 1;
    		for (int k = i; k < j; k++) {
				f[i][j] = max(f[i][j], f[i][k] + f[k + 1][j] + sum[j] - sum[i - 1]);
			}
  		}
	}
 		
  	for (int len = 2; len <= n; len++) {
  		for (int i = 1; i <= 2 * n - len; i++) {
    		int j = len + i - 1;
    		for (int k = i; k < j; k++) {
    			g[i][j] = minn(g[i][j], g[i][k] + g[k + 1][j] + sum1[j] - sum1[i - 1]);
    			//cout << g[i][j] << endl;
			}
  		}
	}
 		
  	int Max = -1e9-10,Min = 1e9+10;
  	for(int i = 1;i <= n;i++) {
 		Max = max(f[i][i+n-1],Max);
  		Min = minn(g[i][i+n-1],Min);
	}
	cout << Min << endl << Max;
	return 0;
}

2025/1/22 21:47
加载中...