刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

猴子拿桃

题目描述:

有N筐桃子从左到右排成一排,已知每筐桃子的数量。现猴子要按照以下规则拿取桃子:

1)猴子每次拿一筐桃子,一共要拿K次桃子;

2)猴子只能按照从左到右的顺序拿取桃子,不能回头,且每次拿取桃子的数量不能少于(大于等于)上一次。

当给定桃子筐数N(1≤N≤12)及每筐桃子的数量,和要拿取桃子的次数K(1≤K≤N),请编写程序,如果有符合规则的拿取方式,输出猴子最多可以拿到的桃子数量,否则输出0。

例如:

N = 4,4筐桃子的数量从左到右依次为16,12,16,17;

K=3,猴子一共要拿3次桃子,符合规则的拿取方式有:[16,16,17],[12,16,17];

其中可拿取到最多桃子的方式是:[16,16,17],合计为49。则猴子最多可以拿到49个桃子。

输入描述:

第一行输入两个正整数N和K(1≤N≤12,1≤K≤N),分别表示桃子的筐数和一共要拿取桃子的次数,正整数之间以一个空格隔开

第二行输入N个正整数(10≤正整数≤200),从左到右依次表示每筐桃子的数量,正整数之间以一个空格隔开

输出描述:

输出一个整数,如果有符合规则的拿去方式,输出猴子最多可以拿到的桃子数量,否则输出0


样例输入:

4 3
16 12 16 17

样例输出:

49

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```#include #include #include using namespace std;int maxPeaches(int N, int K, vector& peaches) int maxPeachCount = 0;vector dp(N + 1, 0);for (int i = 1; i <= N; i++) {dp[i] = dp[i - 1] + peaches[i - 1];}for (int i = N; i >= K; i--) {int maxPeach = 0;for (int j = i; j >= K; j--) {maxPeach = max(maxPeach, dp[j] - dp[j - K] + peaches[j - 1]);}maxPeachCount = max(maxPeachCount, maxPeach);}return maxPeachCount;int main() int N, K;cin >> N >> K;vector peaches(N);for (int i = 0; i < N; i++) {cin >> peaches[i];}int result = maxPeaches(N, K, peaches);cout << result << endl;return 0;```

解析:

【喵呜刷题小喵解析】:
本题可以使用动态规划的方法解决。

首先,定义一个dp数组,dp[i]表示前i筐桃子的总数量。然后,通过遍历桃子的筐数,计算dp数组。

接下来,使用两层循环,外层循环从N到K,内层循环从i到K,表示猴子拿取桃子的筐数从i到i+K-1。在内层循环中,计算猴子拿取桃子的数量,即dp[j] - dp[j - K] + peaches[j - 1],其中j表示猴子拿取桃子的筐数,peaches[j - 1]表示第j筐桃子的数量。

最后,更新最大桃子数量maxPeachCount,并返回。

在主函数中,先读入桃子的筐数N和拿取桃子的次数K,然后读入每筐桃子的数量,最后调用maxPeaches函数计算最大桃子数量,并输出结果。
创作类型:
原创

本文链接:猴子拿桃 题目描述: 有N筐桃子从左到右排成一排,已知每筐桃子的数量。现猴子要按照以下规则拿取桃子:

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share