一、题目解读 小杨买饮料是GESP 2023年六级认证考试中的一道经典动态规划题目,考察学生对背包问题的理解和应用能力。题目描述小杨需要购买n种饮料,每种饮料有特定的体积w和价格v,他要在不超过容量l的情况下,选择最便宜的购买方案。这道题实质上是背包问题的变种,需要运用动态规划思想求解。 二、解题步骤三、代码实现
- #include<iostream>
- using namespace std;
- int main()
- {
- int n, l;
- cin >> n >> l;
- int* v = new int[n];
- int* w = new int[n];
- for (int i = 0; i < n; i++)
- {
- cin >> v[i] >> w[i];
- }
- int** dp = new int* [n + 1];
- for (int i = 0; i <= n; i++)
- {
- dp[i] = new int[l + 1];
- for (int j = 0; j <= l; j++)
- {
- if (!i or !j)dp[i][j] = 0;
- }
- }
- for (int i = 1; i <= n; i++)
- {
- for (int j = 1; j <= l; j++)
- {
- if (w[i-1] > j)dp[i][j] = v[i-1];
- else dp[i][j] = min(dp[i - 1][j], v[i-1]+dp[i - 1][j - w[i-1]]);
- }
- }
- if (dp[n][l] == 0)cout << "no solution";
- else cout << dp[n][l];
- return 0;
- }
复制代码 转自:GESP六级真题解析:动态规划解决小杨买饮料问题(洛谷3873)
|