JZOJ 5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔
2017-09-06 17:08
381 查看
Description
分析
其实这就是很明显的一道斜率优化的dp式子,我们首先可以得到最显然的dp方程,设f[i][j]表示前i层数分成j个不相交的矩形的最大面积,那么我们有:f[i][j]=max(f[i-k+1][j-1]+(y[i]-x[i])*k),k为与当前这一块联通的矩形宽。
很明显,这个式子等价于f[i][k]=max(f[j][k-1]+(y[i]-x[i])*(i-j)),然后就可以斜率优化了
有一个小细节,我就是这里错了然后就很愉快爆炸了,最终的答案显然不应该是f
[k],而应该是f[k+1][k]到f
[k]的最大值
代码
#include <bits/stdc++.h> #define K 105 #define N 20050 #define ll long long int read() { int x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();} while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();} return x * f; } struct NOTE { ll x,y; }a ; ll Q ; int head,tail; ll sum ; ll f [K]; int main() { freopen("pyramid.in","r",stdin); freopen("pyramid.out","w",stdout); int n = read(), k = read(); for (int i = 1; i <= n; i++) a[i].x = read(), a[i].y = read(), sum[i] = a[i].y - a[i].x + 1; for (int j = 1; j <= k; j++) { head = 1, tail = 1; Q[head] = 0; for (int i = 1; i <= n; i++) { while (head < tail && sum[i] * (Q[head] - Q[head + 1]) >= f[Q[head]][j - 1] - f[Q[head + 1]][j - 1]) head++; f[i][j] = f[Q[head]][j - 1] + sum[i] * i - sum[i] * Q[head]; while (head < tail && (f[Q[tail - 1]][j - 1] - f[Q[tail]][j - 1]) * (Q[tail] - i) <= (f[Q[tail]][j - 1] - f[i][j - 1]) * (Q[tail - 1] - Q[tail])) tail--; Q[++tail] = i; } } ll ans = 0; for (int i = k + 1; i <= n; i++) ans = std::max(f[i][k], ans); printf("%lld\n",ans); }
相关文章推荐
- JZOJ5347【NOIP2017提高A组模拟9.5】遥远的金字塔 斜率优化 DP
- 【jzoj5347】【NOIP2017提高A组模拟9.5】【遥远的金字塔】【斜率优化动态规划】
- 【jzoj5346】【NOIP2017提高A组模拟9.5】【NYG的背包】【贪心】
- jzoj5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔 容斥
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
- JZOJ 4933. 【NOIP2017提高组模拟12.24】C
- JZOJ5379. 【NOIP2017提高A组模拟9.21】Victor爱数字
- JZOJ 100043. 【NOIP2017提高A组模拟7.13】第K小数
- 【jzoj5290】【NOIP2017提高组A组模拟8.17】【行程的交集】
- [jzoj5307]【NOIP2017提高A组模拟8.18】偷窃
- JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器
- 【JZOJ5287】【NOIP2017提高组模拟】最短路
- 【JZOJ5330】【NOIP2017提高A组模拟8.22】密码【51nod1569】二项式系数的个数
- 【jzoj5335】【NOIP2017提高A组模拟8.24】【早苗】【矩阵乘法快速幂】
- JZOJ 5395. 【NOIP2017提高A组模拟10.6】Count
- JZOJ 5399. 【NOIP2017提高A组模拟10.7】Confess
- 【JZOJ 5405】【NOIP2017提高A组模拟10.10】Permutation
- JZOJ5405. 【NOIP2017提高A组模拟10.10】Permutation
- JZOJ 5177. 【NOIP2017提高组模拟6.28】TRAVEL
- [JZOJ5187]【NOIP2017提高组模拟6.30】tty's maze