cin>>n; memset(dp, 0x3f3f3f3f , sizeof(dp)); for(int i = 1 ; i <= n ; i ++){ cin>>prefix[i] prefix[i] += prefix[i-1]; dp[i][i] = 0; } for(int i = 2 ; i <= n ; i ++){ for(int l = 1 ; l+i-1 <= n ; l ++){ int r = l+i-1; for(int k = l ; k < r ; k ++){ dp[l][r] = min(dp[l][r], dp[l][k] + dp[k+1][r] + prefix[r] - prefix[l-1]); } } } cout<<dp[1][n];
cin>>s; n = s.length(); memset(dp, 0x3f3f3f3f,sizeof(dp)); for(int i = 0 ; i < n ; i ++) dp[i][i] = 1; for(int i = 2 ; i <= n ; i ++){ for(int l = 0 ; l+i-1 < n ; l ++){ int r = l+i-1; if(s[l] == s[r]){ if(i == 2){ // 注意这里的特判 dp[l][r] = 1; }else{ dp[l][r] = min(dp[l+1][r], dp[l][r-1]); } }else{ for(int k = l ; k < r ; k ++){ dp[l][r] = min(dp[l][r], dp[l][k] + dp[k+1][r]); } } } } cout<<dp[0][n-1];
// 前缀和 cin>>n; for(int i = 1 ; i <= n ; i ++){ cin>>prefix[i]; prefix[i+n] = prefix[i]; } for(int i = 1 ; i <= n*2 ; i ++){ prefix[i] += prefix[i-1]; } // 最小值 memset(dpMin, inf, sizeof(dpMin)); for(int i = 1 ; i < n*2 ; i ++) dpMin[i][i] = 0; for(int i = 2 ; i <= n ; i ++){ for(int l = 1 ; l+i-1 < n*2 ; l ++){ int r = l+i-1; for(int k = l ; k < r ; k ++){ dpMin[l][r] = min(dpMin[l][r], dpMin[l][k] + dpMin[k+1][r] + prefix[r] - prefix[l-1]); } } } min_ = inf; for(int i = 1 ; i < n ; i ++){ min_ = min(min_, dpMin[i][i+n-1]); } //最大值 for(int i = 2 ; i <= n ; i ++){ for(int l = 1 ; l+i-1 < n*2 ; l ++){ int r = l+i-1; for(int k = l ; k < r ; k ++){ dpMax[l][r] = max(dpMax[l][r], dpMax[l][k] + dpMax[k+1][r] + prefix[r] - prefix[l-1]); } } } for(int i = 1 ; i < n ; i ++){ max_ = max(max_, dpMax[i][i+n-1]); } cout<<min_<<"\n"<<max_;
cin>>n; for(int i = 1 ; i <= n ; i ++){ cin>>v[i]; v[i+n] = v[i]; } for(int i = 2 ; i <= n ; i ++){ for(int l = 1 ; l+i-1 < n*2 ; l ++){ int r = l+i-1; for(int k = l ; k < r ; k ++){ dp[l][r] = max(dp[l][r], dp[l][k] + dp[k+1][r] + v[l]*v[k+1]*v[r+1]); } } } for(int i = 1 ; i < n ; i ++){ ans = max(ans, dp[i][i+n-1]); } cout<<ans;