luogu_P3195 [HNOI2008]玩具装箱TOY
时间:2019-10-08
本文章向大家介绍luogu_P3195 [HNOI2008]玩具装箱TOY,主要包括luogu_P3195 [HNOI2008]玩具装箱TOY使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
传送门:https://www.luogu.org/problem/P3195
显而易见:f[i]=min{ f[j]+( i-j-1+ sum[i]-sum[j]-m)^2 } (f[i]表示前i件的最小花费)
化简 f[i]=f[j]+( (i+sum[i]) - (j+sum[j]+m+1) )^2
另 A(x)=x+sum[x] B(x)=A(x)+m+1
上式化简 f[i]=f[j]+ A(i)^2 - 2*A(i)*B(j) + B(j)^2
f[j] + B(j)^2 =f[i] + 2*A(i)*B(j) -A(i)^2
可见 是以 B(j) 为横坐标 f[j]+ B(j)^2 为纵坐标 2*A(i)为斜率
转移就很舒服了 YY一下就知道了!在队列转移时我用了 {l=1,r=0,l<=r}然后挂了,用的{l=r=0,l<r}就过了?
#include<cstdio> #define R register typedef long long ll; using namespace std; ll n,m,c[51000],sum[51000],q[51000],l=0,r=0,f[51000]; ll a(ll x){ return sum[x]+x; } ll b(ll x){ return a(x)+m+1; } ll Y(ll x){ return f[x]+b(x)*b(x); } ll X(ll x){ return b(x); } double slope(ll x,ll y){ return (double)(Y(y)-Y(x))/(X(y)-X(x)); } int main (){ scanf("%lld%lld",&n,&m); for(R int i=1;i<=n;i++) scanf("%lld",&c[i]),sum[i]=sum[i-1]+c[i]; for(R int i=1;i<=n;i++){ while(l<r&&slope(q[l+1],q[l])<=a(i)<<1) l++; f[i]=(f[q[l]]+(a(i)-b(q[l]))*(a(i)-b(q[l]))); while(l<r&&slope(i,q[r])<=slope(q[r],q[r-1])) r--; q[++r]=i; } printf("%lld",f[n]); return 0; }
原文地址:https://www.cnblogs.com/coclhy/p/11634457.html
- Joomla未授权创建用户漏洞(CVE-2016-8870)分析
- 如何将HDFS文件系统挂载到Linux本地文件系统
- 使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器
- 响应式编程的实践
- S2-045 原理初步分析(CVE-2017-5638)
- 如何在HDFS上查看YARN历史作业运行日志
- 面向流的设计思想
- 天才第一步 Docker 纸尿裤
- 如何迁移Kudu1.2的WAL和Data目录
- WordPress REST API 内容注入漏洞分析
- 如何为Kerberos环境的CDH集群在线扩容数据节点
- WinDbg 漏洞分析调试(一)
- MySQL MVCC(多版本控制)
- 如何在集群外节点跨网段向HDFS写数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Games101--Assignment2
- 快速学习-如何使用sentinel
- springboot-mybatis-demo遇到的坑
- 快速学习-Sentinel 工作主流程
- 快速学习-Sentinel 流量控制
- 快速学习-Sentinel 熔断降级
- C#中关于SqlDataAdapter的Update(dataTable)方法
- Jmeter保存下载的文件
- SNAP Java API处理Sentinel-1数据
- springboot开发spark-submit的java代码
- Kustomize ConfigMapGenerate自动生成ConfigMap中的坑
- Godot游戏开发实践之二:AI之寻路新方式
- Vue 侦听器 watch 扩展之立即触发回调、深度监听和注销
- WPF开发之以管理员身份运行
- 快速学习-Sentinel: 分布式系统的流量防卫兵