19339201706 发表于 2025-6-5 16:11:57

GESP六级真题解析:动态规划解决小杨买饮料问题(洛谷3873)

一、题目解读小杨买饮料是GESP 2023年六级认证考试中的一道经典动态规划题目,考察学生对背包问题的理解和应用能力。题目描述小杨需要购买n种饮料,每种饮料有特定的体积w和价格v,他要在不超过容量l的情况下,选择最便宜的购买方案。这道题实质上是背包问题的变种,需要运用动态规划思想求解。二、解题步骤
[*]输入饮料种类数n和背包容量l
[*]创建数组v和w分别存储每种饮料的价格和体积
[*]初始化二维dp数组,边界条件设置为0
[*]双重循环填充dp数组:

[*]外层循环遍历所有饮料
[*]内层循环遍历所有可能的容量
[*]根据当前饮料是否放入背包更新dp值
[*]输出最终结果,若无解则输出"no solution"
三、代码实现
#include<iostream>
using namespace std;

int main()
{
        int n, l;
        cin >> n >> l;
        int* v = new int;
        int* w = new int;
        for (int i = 0; i < n; i++)
        {
                cin >> v >> w;
        }
        int** dp = new int* ;
        for (int i = 0; i <= n; i++)
        {
                dp = new int;
                for (int j = 0; j <= l; j++)
                {
                        if (!i or !j)dp = 0;
                }
        }
        for (int i = 1; i <= n; i++)
        {
                for (int j = 1; j <= l; j++)
                {
                        if (w > j)dp = v;
                        else dp = min(dp, v+dp]);
                }
        }
        if (dp == 0)cout << "no solution";
        else cout << dp;

        return 0;
}转自:GESP六级真题解析:动态规划解决小杨买饮料问题(洛谷3873)

页: [1]
查看完整版本: GESP六级真题解析:动态规划解决小杨买饮料问题(洛谷3873)