2 条题解

  • 0
    @ 2022-8-18 14:54:02

    '''和上一题十分类似,简单加点东西就好了。这里不多做解释。代码比较好理解。

    /*****************************************
    备注:
    ******************************************/
    #include <queue>
    #include <math.h>
    #include <stack>
    #include <stdio.h>
    #include <iostream>
    #include <vector>
    #include <iomanip>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    #define LL long long
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    int n;
    int dp[505][505];
    int f[505][505];
    int a[305];
    int sum[N];
    int main(){
    
    	cin>>n;
    	for(int i=1; i<=n; i++)
    	{
    		cin>>a[i];
    		a[i + n] = a[i];
    	}
    	for(int i=1; i<=2*n; i++)
    	{
    		sum[i] = sum[i - 1] + a[i];
    	}
    	for(int k = 2; k <= n; k++)
    	{
    		for(int l = 1; l + k - 1 <= 2 * n; l++)
    		{
    			int r = l + k - 1;
    			f[l][r] = INF;
    			for(int i = l; i < r; i++)
    			{
    				dp[l][r] = max(dp[l][r], dp[l][i] + dp[i + 1][r] + sum[r] - sum[l - 1]);
    				f[l][r] = min(f[l][r], f[l][i] + f[i + 1][r] + sum[r] - sum[l - 1]);
    			}
    		}
    	}
    	int minn = INF;
    	int maxx = 0;
    	for(int i = 1; i <= n; i++)
    	{
    		maxx = max(maxx, dp[i][i + n - 1]);
    		minn = min(minn, f[i][i + n - 1]);
    	}
    	cout<<minn<<endl;
    	cout<<maxx<<endl;
    	
    
    	return 0;
    }
    

    信息

    ID
    1639
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    122
    已通过
    54
    上传者