[dp]cf gym 101485B; bzoj4426 Better Productivity(NWERC 2015 B)
2017-09-20 10:29
483 查看
@(ACM题目)[dp]
trinkets. The new factory design consists of p independent and identical production lines. Each production line can be assigned some number of workers.
The actual work is of course all done by machines, so the production rate of a production line is independent of the actual number of workers assigned to it. However, the workers work in shifts, and due to local safety regulations, a production line can only be active while all of its workers are present (any worker who arrives before the last person to arrive, or leaves after the first person leaves, will be spending the inactive time having a coffee break). In other words, the productivity of a production line equals the length of the timespan during which all of the workers assigned to this production line are present. Crucially, the productivity of each line must be positive (i.e., the last worker to arrive for a line must arrive strictly before the first worker for that line leaves), since otherwise the workers feel that their jobs are meaningless.
Unfortunately, due to some pesky labor laws, ACME are not allowed to fire any of their workers,
which means that each of their n workers must be assigned to some production line, even though
this may actually decrease the overall productivity of the factory.
All these rules and regulations are making a headache for ACME management. Can you
help them figure out the maximum possible total productivity (sum of productivities of the p
production lines) of their new factory?
- one line containing two integers n and p (1 ≤ p ≤ n ≤ 200), the number of employees
and the number of production lines;
- n lines each containing two integers a and b (0 ≤ a < b ≤ 100 000), representing a
worker that arrives at time a and leaves at time b.
You may assume that there exists at least one valid assignment of workers to production lines.
1 3
1 5
4 6
2 7
将n个区间分为两个集合:
A集合中的区间能覆盖n个区间中的某一个
B集合中的区间不能覆盖n个区间中的任何一个
若有多个相等区间,在B中留一个。
那么A中的若和其他的区间分为一组,不会起作用,故将A中的按贪心取最大的k个,每个一组,在B中分剩余p−k组。
对于B,先将区间排序,dp[i][j]代表前i个区间,分为j组的最大值。只需考虑第i个区间与前面多少个分为一组,不断更新dp[i][j]即可。
Description
ACME Inc. is reorganizing their factory, in order to maximize their productivity of uselesstrinkets. The new factory design consists of p independent and identical production lines. Each production line can be assigned some number of workers.
The actual work is of course all done by machines, so the production rate of a production line is independent of the actual number of workers assigned to it. However, the workers work in shifts, and due to local safety regulations, a production line can only be active while all of its workers are present (any worker who arrives before the last person to arrive, or leaves after the first person leaves, will be spending the inactive time having a coffee break). In other words, the productivity of a production line equals the length of the timespan during which all of the workers assigned to this production line are present. Crucially, the productivity of each line must be positive (i.e., the last worker to arrive for a line must arrive strictly before the first worker for that line leaves), since otherwise the workers feel that their jobs are meaningless.
Unfortunately, due to some pesky labor laws, ACME are not allowed to fire any of their workers,
which means that each of their n workers must be assigned to some production line, even though
this may actually decrease the overall productivity of the factory.
All these rules and regulations are making a headache for ACME management. Can you
help them figure out the maximum possible total productivity (sum of productivities of the p
production lines) of their new factory?
Input
The input consists of:- one line containing two integers n and p (1 ≤ p ≤ n ≤ 200), the number of employees
and the number of production lines;
- n lines each containing two integers a and b (0 ≤ a < b ≤ 100 000), representing a
worker that arrives at time a and leaves at time b.
You may assume that there exists at least one valid assignment of workers to production lines.
Output
Output the maximum productivity level possible for the factorySample Input
4 21 3
1 5
4 6
2 7
Sample Output
4分析
本题题意为n个区间分为p组,求每组交的和的最大值,每组的交不能为空。将n个区间分为两个集合:
A集合中的区间能覆盖n个区间中的某一个
B集合中的区间不能覆盖n个区间中的任何一个
若有多个相等区间,在B中留一个。
那么A中的若和其他的区间分为一组,不会起作用,故将A中的按贪心取最大的k个,每个一组,在B中分剩余p−k组。
对于B,先将区间排序,dp[i][j]代表前i个区间,分为j组的最大值。只需考虑第i个区间与前面多少个分为一组,不断更新dp[i][j]即可。
#include <bits/stdc++.h> using namespace std; const int maxn = 200 + 5; struct Data { int l, r; bool operator < (const Data &rhs) const { if(l != rhs.l) return l < rhs.l; return r < rhs.r; } }a[maxn], b[maxn]; int f[maxn][maxn]{0}, c[maxn]; int main() { int n, p; cin >> n >> p; for(int i = 1; i <= n; ++ i) scanf("%d%d", &a[i].l, &a[i].r); sort(a + 1, a + n + 1); int cnt = 0, cnt2 = 0; for(int i = 1; i <= n; ++ i) { bool ck = true; for(int j = i + 1; j <= n; ++ j) { if(a[i].l <= a[j].l && a[i].r >= a[j].r) { ck = false; break; } } int k = i - 1; while(k >= 1 && a[k].l == a[i].l) { if(a[i].r > a[k].r) { ck = false; break; } --k; } if(ck) b[++cnt] = a[i]; else c[++cnt2] = a[i].r - a[i].l; } f[1][1] = b[1].r - b[1].l; for(int i = 2; i <= cnt; ++ i) { for(int j = 1; j <= min(i, p); ++ j) { f[i][j] = 0; if(f[i-1][j-1]) f[i][j] = f[i-1][j-1] + b[i].r - b[i].l; for(int k = i - 1; k >= 1 && b[k].r > b[i].l; --k) { if(f[k-1][j-1] || k == 1) f[i][j] = max(f[i][j], f[k-1][j-1] + b[k].r - b[i].l); } } } int res = f[cnt][p]; int sum = 0; sort(c + 1, c + 1 + cnt2); for(int i = cnt2, j = 1; i >= 1 && j < p; ++ j , -- i) { sum += c[i]; if(f[cnt][p - j]) res = max(res, f[cnt][p-j] + sum); } cout << res << endl; }
相关文章推荐
- bzoj 4426: [Nwerc2015]Better Productivity最大生产率 贪心+dp
- NWERC 2015B/bzoj 4426 Better Productivity
- 【NWERC2015】【BZOJ4426】BetterProductivity最大生产率
- codeforces Gym - 101485 D Debugging (2015-2016 Northwestern European Regional Contest (NWERC 2015))
- codeforces Gym - 101485 A (2015-2016 Northwestern European Regional Contest (NWERC 2015))
- BZOJ4426 : [Nwerc2015]Better Productivity最大生产率
- BZOJ 4426: [Nwerc2015]Better Productivity最大生产率
- 【BZOJ4428】[Nwerc2015]Debugging调试【DP】【记忆化搜索】【分块】
- 【BZOJ4033】【HAOI2015】树上染色 树形DP
- BZOJ 3925 [Zjoi2015]地震后的幻想乡 ——期望DP
- bzoj 4036: [HAOI2015]按位或 快速莫比乌斯变换+期望dp
- [BZOJ4033][HAOI2015]树上染色(思路+树形背包DP)
- Gym 100952D&&2015 HIAST Collegiate Programming Contest D. Time to go back【杨辉三角预处理,组合数,dp】
- 【BZOJ 4008】【HNOI 2015】亚瑟王【概率与期望DP】
- BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)
- BZOJ3890 [Usaco2015 Jan]Meeting Time K短路 Astar || 拓扑DP
- 【bzoj4431】[Nwerc2015]Hole in One一杆进洞
- [矩阵快速幂 DP] BZOJ 4037 [HAOI2015]数字串拆分 & BZOJ 2323 [ZJOI2011]细胞
- bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼 (CDQ分治)
- BZOJ4033:[HAOI2015]树上染色(树形dp)