1 条题解

  • 1
    @ 2024-6-13 11:43:44

    【题目大意】

    有 n 种饮料,每种饮料只能选 1 瓶,相当于有 n 瓶饮料,每种饮料只有两种状态:选或者不选,即 0 和 1。选择饮料的升数最高是 L 升,表示有上限。希望尽可能的少花钱,就是求满足条件的最小值。符合 01 背包的问题。

    【考纲知识点】

    基本运算、输入输出语句、循环、动态规划的知识。

    【解题思路】

    按题目要求定义好需要的变量,并实现输入;

    输入 n 行,每行 2 个整数,分别表示饮料的零售价和升数;

    初始化边界,买 0 升饮料的费用肯定是 0,其他初始化为最大值;

    每种饮料都要参与判断,选还是不选,更新 L~0 需要的费用;

    最终求出 L 升饮料需要的费用

    【参考代码】

    #include <iostream>
    using namespace std;
    const int INF = 1000000000;
    int cost[2001]; 
    int main() {
        int N = 0, L = 0;
        cin >> N >> L;
        cost[0] = 0;
        for (int i = 1; i <= L; i++) 
            cost[i] = INF;
        for (int i = 0; i < N; i++) { 
            int c = 0, l = 0;
            cin >> c >> l;
            for (int j = L; j >= 0; j--) 
                 
                cost[j] = min(cost[j], cost[max(j - l, 0)] + c);
        }
        if (cost[L] == INF) 
            cout << "no solution" << endl;
        else 
            cout << cost[L] << endl;
        return 0;
    }
    
    • 1

    [GESP202309 六级] 小杨买饮料

    信息

    ID
    577
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    55
    已通过
    15
    上传者