1 条题解
-
1
【题目大意】
有 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
信息
- ID
- 577
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 55
- 已通过
- 15
- 上传者