| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 212014 | suishou | 书架问题1 | C++ | 解答错误 | 96 | 3 MS | 376 KB | 760 | 2026-06-11 14:10:00 |
#include <iostream> #include <algorithm> using namespace std; int n, sw; int w[100005], h[100005], f[100005]; int main() { cin >> n >> sw; for (int i = 1; i <= n; i++) { // 修正:先读入宽度 w,再读入高度 h cin >> w[i] >> h[i]; } for (int i = 1; i <= n; i++) { int mx = h[i]; int sum_w = w[i]; f[i] = f[i - 1] + h[i]; // 初始化为第 i 本书单独放一层 for (int j = i - 2; j >= 0; j--) { sum_w += w[j + 1]; if (sum_w > sw) break; // 超过书架最大宽度,截断 mx = max(mx, h[j + 1]); f[i] = min(f[i], f[j] + mx); } } cout << f[n] << endl; return 0; }