1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int MAXN = 100000; int n; // [区间右端点] <左端点, 数量> map<int, int> e[MAXN + 5]; // [1,i] 最大的合法区间权值和 int f[MAXN + 5]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { int a, b; cin >> a >> b; a = a + 1; b = n - b; if (a > b) continue; // 区间 [a,b] e[b][a]++; } for (int i = 1; i <= n; i++) { f[i] = f[i - 1]; for (auto now : e[i]) { // [l,r]: w 个人 int l = now.first; int r = i; int w = min(r - l + 1, now.second); f[i] = max(f[i], f[l - 1] + w); } } cout << n - f[n]; return 0; }
- 1
信息
- ID
- 13395
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 7
- 标签
- 递交数
- 20
- 已通过
- 9
- 上传者