动态规划:
dp[i]代表以arr[i]结尾的若干个子数组中的和的最大值。
状态转移方程:
dp[i] = arr[i], if dp[i -1] < 0
dp[i] = dp[i - 1] + arr[i], if dp[i - 1] >= 0
然后取dp数组里的最大值就行。

class Solution {
public:
    int maxsumofSubarray(vector<int>& arr) {
        int len = arr.size();
        int dp[len];  //以arr[i]结尾的子数组中的和的最大值;
        dp[0] = arr[0];
        int max = dp[0];
        for(int i = 1; i < len; i++)
        {
            if(dp[i - 1] < 0) dp[i] = arr[i];
            else dp[i] = arr[i] + dp[i - 1];
            if(dp[i] > max) max = dp[i];
        }
        return max;
    }
};