1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; long long L; cin >> n >> L; vector<long long> h(n + 1), w(n + 1); for (int i = 1; i <= n; ++i) { cin >> h[i] >> w[i]; } const long long INF = 4e18; vector<long long> dp(n + 1, INF); dp[0] = 0; for (int i = 1; i <= n; ++i) { long long maxh = 0, sumw = 0; // 枚举最后一层的左端点 j(第 j..i 本书在同一层) for (int j = i; j >= 1; --j) { sumw += w[j]; if (sumw > L) break; maxh = max(maxh, h[j]); dp[i] = min(dp[i], dp[j - 1] + maxh); } } cout << dp[n] << '\n'; return 0; }
- 1
信息
- ID
- 2078
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 3
- 上传者