2 条题解

  • -1
    @ 2023-7-15 10:25:46
    #include 
    using namespace std;
    const int N = 35;
    int n;
    int h[N], ne[N], to[N], id;
    int dp[N][N], root[N][N];
    int a[N];
    
    int dfs(int l, int r)
    {
    	if(l == r)
    	{
    		root[l][r] = l;
    		return a[l];
    	}
    	else if(dp[l][r]) return dp[l][r];
    	else
    	{
    		if(dfs(l + 1, r) + a[l] > dp[l][r])
    		{
    			dp[l][r] = dfs(l + 1, r) + a[l];
    			root[l][r] = l;
    		}
    		if(dfs(l, r - 1) + a[r] > dp[l][r])
    		{
    			dp[l][r] = dfs(l, r - 1) + a[r];
    			root[l][r] = r;
    		}
    		for(int i = l + 1; i < r; i++)
    		{
    			if(dfs(l, i - 1) * dfs(i + 1, r) + a[i] > dp[l][r])
    			{
    				dp[l][r] = dfs(l, i - 1) * dfs(i + 1, r) + a[i];
    				root[l][r] = i;
    			}
    		}
    	}
    	return dp[l][r];
    }
    
    void print(int l, int r)
    {
    	if(l > r) return;
    	cout << root[l][r] << ' ';
    	if(l == r) return;
    	print(l, root[l][r] - 1);
    	print(root[l][r] + 1, r);
    }
    
    int main()
    {
    	cin >> n;
    	for(int i = 1; i <= n; i++)	cin >> a[i];
    	cout << dfs(1, n) << endl;
    	print(1, n);
    	return 0;
    }
    

    信息

    ID
    475
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    41
    已通过
    25
    上传者