返回首页 返回题库

条形蛋糕

C++ 中等 GESP六级真题 #动态规划#完全背包

题目描述

题面描述

寒假到了,小杨同学打算找一份兼职,顺便体验一下打工人的生活。

小杨同学给一家蛋糕店发送了一份自己的简历,希望可以在寒假来这里帮忙。店长最近正好遇到了一个难题:店里每天会做一条长条蛋糕,但是不同长度的蛋糕块卖出的价格不同,应该怎么分才能卖得最多呢?

有趣的是店长曾经学习过计算机专业。他最近对动态规划算法很感兴趣,于是打算用这个问题考一考小杨同学,问题如下:

给定一条长度为的长条蛋糕和一个价格表,该价格表表示长度为()的蛋糕块的价格为。求蛋糕的分割方案,使得总销售价格最大,注意蛋糕块的长度必须为整数。

输入格式

第一行一个正整数(),表示长条蛋糕的总长度。

第二行个正整数(),表示不同长度蛋糕块的价格。

输出格式

一行一个正整数,表示最大总销售价格。

样例1

输入:

4
1 5 8 9

输出:

10

样例2

输入:

10
1 5 8 9 10 17 17 20 24 30

输出:

30

样例解释

第一个样例中,长度为1的蛋糕价值为1,长度为2的蛋糕价值为5,长度为3的蛋糕价值为8,长度为4的蛋糕价值为9;

总长度为4的长条蛋糕,有五种本质不同的分法。

其对应的总销售价格分别为,故最大总销售价格为10。

第二个样例中,长度为10的长条蛋糕,销售价格最大的分法为,最大总销售价格为30。

时间与内存限制

时间限制:1.0 s

内存限制:512.0 MB

💡 查看提示(先自己想一想再看)
本题考察动态规划中的完全背包模型,定义dp[i]为长度为i的蛋糕能获得的最大收益,状态转移方程为dp[j] = max(dp[j], dp[j-i] + p[i]),其中i为当前考虑切割的蛋糕块长度。注意边界条件dp[0] = 0,初始时dp数组初始化为0即可。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 3 浏览

讨论(0)