提交时间:2026-06-11 14:10:00

运行 ID: 212014

#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; }