2. 定制架子问题 【题目描述】 李莳花要做一个架子,把她喜欢的摆件叠放起来,她的每个摆件的位置顺序是固 定的。这个架子的宽度是 W,每层排放的摆件不能超过这个宽度,每层架子的高度不 能低于最高的摆件的高度。假设,给出排列好的每个摆件的宽度 Wi,和高度 Hi,请 计算需要最少多高的架子。 【输入格式】 输入的第一行有 2 个数字,一个是摆件的个数 n,和架子的宽度 W。 以下摆件个数 n 行,每行的第一个数是摆件的宽度 Wi 和高度 Hi。 【输出格式】 输出放置摆件架子的最低高度。 【样例输入】(测试数据不包含本样例) 5 5 2 1 1 2 1 3 2 3 2 2 【样例输出】 5 C++代码
时间: 2024-04-18 12:25:16 浏览: 236
这是一个经典的动态规划问题,可以使用动态规划来解决。下面是一个使用C++实现的代码示例:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, W;
cin >> n >> W;
vector<pair<int, int>> items(n);
for (int i = 0; i < n; i++) {
cin >> items[i].first >> items[i].second;
}
sort(items.begin(), items.end());
vector<int> dp(W + 1, 0);
for (int i = 0; i < n; i++) {
for (int j = W; j >= items[i].first; j--) {
dp[j] = max(dp[j], dp[j - items[i].first] + items[i].second);
}
}
cout << dp[W] << endl;
return 0;
}
```
希望这个代码能够帮助到你解决问题!如果还有其他问题,请随时提问。
阅读全文