JZOJ 5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔
来源:互联网 发布:陕西seo服务 编辑:程序博客网 时间:2024/05/16 00:27
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[n][k],而应该是f[k+1][k]到f[n][k]的最大值
代码
#include <bits/stdc++.h>#define K 105#define N 20050#define ll long longint 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[N];ll Q[N];int head,tail;ll sum[N];ll f[N][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);}
阅读全文
0 0
- JZOJ 5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔
- jzoj5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔 容斥
- JZOJ5347【NOIP2017提高A组模拟9.5】遥远的金字塔 斜率优化 DP
- 【NOIP2017提高A组模拟9.5】遥远的金字塔 斜率优化详解
- 【jzoj5347】【NOIP2017提高A组模拟9.5】【遥远的金字塔】【斜率优化动态规划】
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- 【JZOJ 4931】【NOIP2017提高组模拟12.24】A
- JZOJ 5195. 【NOIP2017提高组模拟7.3】A
- JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- jzoj. 100031. 【NOIP2017提高A组模拟7.9】外星密码
- JZOJ 100035【NOIP2017提高A组模拟7.10】区间
- JZOJ 100036 【NOIP2017提高A组模拟7.10】随机
- JZOJ 100037【NOIP2017提高A组模拟7.11】后缀数组
- JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
- JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度
- JZOJ 100045. 【NOIP2017提高A组模拟7.13】好数
- JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片
- adsp gsensor 校准失败问题
- unity 学习路线
- python3根据工资表统计人员部门变动情况
- SpringCloud 笔记 (六)---- 客户端负载均衡Ribbon
- Excel上传
- JZOJ 5347. 【NOIP2017提高A组模拟9.5】遥远的金字塔
- c++多线程重点难点(一)interlocked系列原子操作
- Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8解决
- C++ 文件操作
- C++默认拷贝构造函数调用
- Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-plugin-plugi
- leetcode 304.Range Sum Query 2D
- final修饰符
- 移植qt5.6.0到armv7 <完整过程>