mcbbnb 2023-08-20 21:06 采纳率: 85.7%
浏览 11
已结题

c++喝魔法药水问题


药水的规则:傲傲总共可以喝下m瓶魔法药水,并且使用时,同一种魔法药水最多连续喝下k瓶。如果超过了这些限制,就会适得其反!

因此小傲想知道,按照这样的规则喝下魔法药水,最多可以增长多大的重量呢?

输入格式
第一行,输入三个整数n、m、k表示傲傲得到了n种魔法药水,最多喝下m瓶,每种药水最多连续喝下k瓶。

第二行,输入n个整数w 1,w 2.......w n,第ii个数表示第ii种药水能使傲傲增加的重量为w i

输出格式
一个整数,输出最多可以增长的重量。

输入数据 1
6 3 2 
1 3 3 7 4 2
输出数据 1
18
输入数据 2
3 1000000000 1 
1000000000 987654321 1000000000
输出数据 2
1000000000000000000
  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-22 01:30
    关注

    【以下回答由 GPT 生成】

    首先,我们需要读取输入的数据并进行相应的处理。然后,我们可以使用动态规划的方法来解决这个问题。

    首先,我们可以定义一个二维数组dp,其中dp[i][j]表示使用前i种药水,喝掉了j瓶药水时,傲傲能增长的最大重量。由于我们只需要储存前一个状态的值,所以我们可以使用两个一维数组进行状态转移。

    接下来,我们可以使用一个循环来遍历每种魔法药水,并在其中再进行一个循环来遍历可以喝下的药水瓶数。在内层循环中,我们可以利用状态转移方程来更新dp数组的值。对于第i种药水,我们可以分两种情况考虑:

    1. 当前喝的药水数小于等于k时,我们可以选择喝这瓶药水,也可以选择不喝这瓶药水。如果选择喝这瓶药水,则增长的重量为dp[i-1][j-1] + wi,其中dp[i-1][j-1]表示前i-1种药水喝了j-1瓶的最大重量。如果选择不喝这瓶药水,则增长的重量为dp[i-1][j],表示前i-1种药水喝了j瓶的最大重量。所以,我们可以取这两种情况中的较大值。

    2. 当前喝的药水数大于k时,我们只能选择不喝这瓶药水,增长的重量为dp[i-1][j]。

    最后,我们可以返回dp[n][m]的值,即使用了n种药水,喝掉了m瓶药水时,傲傲能增长的最大重量。

    下面是具体的代码实现:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int n, m, k;
        cin >> n >> m >> k;
        vector<int> w(n);
        for (int i = 0; i < n; i++) {
            cin >> w[i];
        }
    
        vector<vector<long long>> dp(n + 1, vector<long long>(m + 1, 0));
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                for (int x = 0; x <= min(j, k); x++) {
                    dp[i][j] = max(dp[i][j], dp[i - 1][j - x] + w[i - 1] * x);
                }
            }
        }
    
        cout << dp[n][m] << endl;
    
        return 0;
    }
    

    这样,我们就可以解决该问题了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 创建了问题 8月20日

悬赏问题

  • ¥100 用数字代替ip主机号断与旋转链接号段
  • ¥20 学校内手机热点不能使用
  • ¥15 qwen模型微调训练时grad_norm为0.0或为nan
  • ¥15 若依- Spring cloud-plus集成阿里云schedulerX再控制台应用管理找不到实例
  • ¥15 用vs2022 fortran调试只无法查看数组的值,显示发生未指定的错误
  • ¥15 gge梦幻西游的地图制作
  • ¥15 对计算机的学习没有方向
  • ¥15 用VBA抓取淘宝的发票号码和下载发票pdf遇到的问题
  • ¥20 java excel导出有什么解决方案
  • ¥15 关于#r语言#的问题:并不是原CSV文件中的数据