vector<int>calhuawei91_1(vector<int>&pre, vector<int>&cur) { vector<int>res; int send1 = min(pre[0], cur[0]);//第一次传递时从i发送的数量 int tmp = (pre[0] > cur[0]) ? min(pre[0] - cur[0] , cur[1]) : 0; int send2 = min(pre[1] + tmp, cur[0]);//第二次传递时从i发送的数量 res.push_back(send1); res.push_back(send2); return res; } int huawei91_1(vector<vector<int>>&nums,int sum) { int len = nums.size(); if (len == 0) return sum; vector<vector<int>>dp((len + 1),vector<int>(2,0)); dp[0][0] = sum; dp[0][1] = 0; dp[1] = calhuawei91_1(dp[0],nums[0]); for (int i = 2; i <= len; i++) { vector<int> res1 = calhuawei91_1(dp[i - 1], nums[i - 1]); vector<int> res2 = calhuawei91_1(dp[i - 2], nums[i - 1]); dp[i] = (res1[0] + res1[1] < res2[0] + res2[1]) ? res1 : res2; } return min(dp[len - 1][0] + dp[len - 1][1], dp[len][0] + dp[len][1]); }