小可来到一家糖果店,参加抽奖活动。活动规则如下: 有 nn 个密封好的格子,每个格子中有一个卡片,卡片上写着一个整数 xx,表示小可能够获得的糖果数量。 当 xx 大于 00 的时候表示能够获得糖果, 当 xx 小于 00 的时候表示要失去糖果。 小可必须按顺序从第一个格子开始抽奖,但是他能够自己选择在哪个格子停止抽奖,那么此时的糖果数量就是他能获得的糖果数量。 现在小可想要知道自己能够获得最大的糖果数量是多少,请你编写一个程序帮助他。 输入格式 第一行给一个nn (3\le n\le20000)(3≤n≤20000)。 第二行给nn个数xx(-1000\le x \le1000)(−1000≤x≤1000)。 输出格式 输出最多能获得多少糖果 输入数据 1 6 1 2 3 -1 5 -2 输出数据 1 10 样例 1 说明 选择第一个格子停下:和为 1 选择第二个格子停下:和为 1+2 = 3 选择第三个格子停下:和为 1+2+3 = 6 选择第四个格子停下:和为 1+2+3-1 = 5 选择第五个格子停下:和为 1+2+3-1+5 = 10 选择第六个格子停下:和为 1+2+3-1+5-2 = 8 所以最多能获得 10 颗糖果
时间: 2024-04-18 18:25:17 浏览: 122
一个抽奖程序
根据题目要求,我们需要编写一个程序来帮助小可计算他能够获得的最大糖果数量。下面是使用C++实现该算法的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int getMaxCandies(vector<int>& candies) {
int n = candies.size();
vector<int> dp(n + 1, 0);
for (int i = 1; i <= n; i++) {
dp[i] = max(dp[i - 1] + candies[i - 1], candies[i - 1]);
}
return dp[n];
}
int main() {
int n;
cin >> n;
vector<int> candies(n);
for (int i = 0; i < n; i++) {
cin >> candies[i];
}
int maxCandies = getMaxCandies(candies);
cout << maxCandies << endl;
return 0;
}
```
希望以上代码能够解决你的问题,如果还有其他疑问,请随时提出。
阅读全文