有一排香蕉,每个香蕉有不同的甜度值。小猴子想吃香蕉,但不能吃相邻的香蕉。以下代码能找到小猴子
吃到最甜的香蕉组合。
// bananas:香蕉的甜度void findSelectedBananas(vector<int>& bananas, vector<int>& dp) { vector<int> selected; int i = bananas.size() - 1; while (i >= 0) { if (i == 0) { selected.push_back(0); break; } if (dp[i] == dp[i-1]) { i--; } else { selected.push_back(i); i -= 2; } } reverse(selected.begin(), selected.end()); cout << "小猴子吃了第: "; for (int idx : selected) cout << idx+1 << " "; cout << "个香蕉" << endl;} int main() { vector<int> bananas = {1, 2, 3, 1}; // 每个香蕉的甜 vector<int> dp(bananas.size()); dp[0] = bananas[0]; dp[1] = max(bananas[0], bananas[1]); for (int i = 2; i < bananas.size(); i++) { dp[i] = max(bananas[i] + dp[i-2], dp[i-1]); } findSelectedBananas(bananas, dp); return 0;}