DP+滚动数组 || [Usaco2007 Nov]Telephone Wire 架设电话线 || BZOJ 1705 || Luogu P2885
本来是懒得写题解的…想想还是要勤发题解和学习笔记…然后就滚过来写题解了。
题面:[USACO07NOV]电话线Telephone Wire
题解:
F[ i ][ j ] 表示前 i 根电线杆,第 i 根电线杆长度为 j 时的最优答案
容易推出基本的转移方程:

mx为初始最长的电线杆长度,显然延长后的电线杆最长不会超过mx
然后就把绝对值拆开,分类讨论一下

然后就发现这个东西可以单调队列优化DP,但是这个题目并不需要单队优化,在循环时记录一下最大值就可以
然后因为给的空间就64MB,所以要套一个滚动数组
就这样了…啊写题解好累啊
代码:
#include<cstdio>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define sqr(a) ((a)*(a))
using namespace std;
const int maxn=1e5+,inf=<<,maxh=;
int N,C,H[maxn],F[][maxh],mx=,ans=inf;
int main(){
scanf("%d%d",&N,&C);
for(int i=;i<=N;i++) scanf("%d",&H[i]),mx=max(mx,H[i]);
for(int i=;i<=mx;i++) F[][i]=F[][i]=inf;
for(int i=H[];i<=mx;i++) F[][i]=sqr(i-H[]);
for(int i=;i<=N;i++){
int k=inf;
for(int j=H[i-];j<=mx;j++){
k=min(k,F[(i-)&][j]-C*j);
if(j>=H[i]) F[i&][j]=k+j*C+sqr(j-H[i]);
}
k=inf;
for(int j=mx;j>=H[i];j--){//
k=min(k,F[(i-)&][j]+C*j);
F[i&][j]=min(F[i&][j],k-j*C+sqr(j-H[i]));
}
for(int j=;j<=mx;j++) F[(i+)&][j]=inf;
}
for(int i=H[N];i<=mx;i++) ans=min(ans,F[N&][i]);
printf("%d\n",ans);
return ;
}
By:AlenaNuna
DP+滚动数组 || [Usaco2007 Nov]Telephone Wire 架设电话线 || BZOJ 1705 || Luogu P2885的更多相关文章
- bzoj1705[Usaco2007 Nov]Telephone Wire 架设电话线(dp优化)
1705: [Usaco2007 Nov]Telephone Wire 架设电话线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 441 Solved: ...
- BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP
BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...
- 【bzoj1705】[Usaco2007 Nov]Telephone Wire 架设电话线 dp
题目描述 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= N < ...
- bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线——dp
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...
- BZOJ 1705: [Usaco2007 Nov]Telephone Wire 架设电话线 DP + 优化 + 推导
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...
- 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线
可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...
- 【BZOJ】1705: [Usaco2007 Nov]Telephone Wire 架设电话线
[题意]给定一排n根杆高度hi,一个常数C,杆升高x的代价为x^2,相邻两杆之间架设电话线代价为高度差*C,求总代价最小. [算法]DP+辅助数组优化 [题解]令f[i][j]表示第i根杆高度为j的最 ...
- bzoj 1705;poj 3612:[Usaco2007 Nov]Telephone Wire 架设电话线
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...
- bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线【dp】
i的初始化写成2了于是成功查错2h--怕不是个傻子 设f[i][j]为第i根高为j,转移是 \[ f[i][j]=min(f[i-1][k]+abs(k-j)*c+(j-h[i])^2)(j>= ...
随机推荐
- JavaEE-实验四 HTML与JSP基础编程
1.使用HTML的表单以及表格标签,完成以下的注册界面(验证码不做) html代码(css写于其中) <!DOCTYPE html> <html> <head> & ...
- React之defaultProps、propTypes
1.新增知识点 /** React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. 父子组件:组件的相互调用中,我们把调 ...
- Kibana 5.5.2 安装包下载 (各种历史版本下载)
背景说明 最近项目中在使用 5.5.2 版本的 Elasticsearch 作为数据库,使用的是以前的老版本. 用到 Elasticsearch ,难免要和其相关基本操作命令打交道.选择一款顺手的工 ...
- 微信小程序的配置详解
1.配置详解: 使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 1>pages 接受一个数组,每一项都是字符串,来指定小 ...
- elasticsearch-6.2.3单机搭建
1.这里说明下,elasticsearch为了保证安全性需要创建新的用户名,需要在新的用户名下运行,本人用的是elasticsearch-6.2.3,centos7.3 2.切换目录到:cd usr/ ...
- unieap platform eclipse.ini vm设置
-vm C:\Program Files (x86)\Java\jdk1..0_45\bin\javaw.exe -startup plugins/org.eclipse.equinox.launch ...
- Go语言入门 不错
Go入门 Go介绍 部落图鉴之Go:爹好还这么努力? 环境配置 安装 下载源码编译安装 下载相应平台的安装包安装 下载地址:https://golang.org/dl/ Linux上的apt-get, ...
- tensorflow keras导包混用
tensoboard 导入:导入包注意 否者会报错 :keras FailedPreconditionError: Attempting to use uninitialized value trai ...
- python logger 日志模块
logger 日志 """logging配置""" import osimport logging.config # 定义三种日志输出格式 ...
- CSRF-DVWA_1.9-笔记
CSRF : Cross-site request forgery 跨站请求伪造 所用到的工具: Firefox浏览器及其插件 HackBar(快速构造URL) 和 T ...