【题意】给定一排n根杆高度hi,一个常数C,杆升高x的代价为x^2,相邻两杆之间架设电话线代价为高度差*C,求总代价最小。

【算法】DP+辅助数组优化

【题解】令f[i][j]表示第i根杆高度为j的最小代价。

f[i][j]=min(f[i-1][k]+C*|j-k|+(a[i]-j)^2)。复杂度O(n*100*100)。

考虑优化方向是省略k这一维的枚举,故分离方程中和k无关的变量

f[i][j]=min(f[i-1][k]-C*k)+C*j+(a[i]-j)^2,k<=j

f[i][j]=min(f[i-1][k]+C*k)-C*j+(a[i]-j)^2,k>j

这样就可以用辅助数组优化了。

b[i][j]=min(f[i][k]-C*k),k<=j

c[i][j]=min(f[i][k]+C*k),k>=j

则方程转化为:

f[i][j]=min( b[i-1][j] + C*j , c[i-1][j+1] - C*j )+C*j+(a[i]-j)^2。

复杂度O(n*100)。

细节:

1.必须初始化f[1]。

2.是c[j+1],因为统计的时候是>=。

3.所有初始化为inf。

#include<cstdio>
int min(int a,int b){return a<b?a:b;}
const int maxn=,maxk=,inf=0x3f3f3f3f;
int f[maxk],b[maxk],c[maxk],n,m,C,a[maxn];
int main(){
scanf("%d%d",&n,&C);
for(int i=;i<=n;i++){scanf("%d",&a[i]);if(a[i]>m)m=a[i];}
b[]=c[m+]=inf;
for(int i=;i<=n;i++){
if(i==)for(int j=;j<=m;j++)if(j>=a[i])f[j]=(a[i]-j)*(a[i]-j);else f[j]=inf;
else for(int j=;j<=m;j++)if(j>=a[i])f[j]=min(b[j]+C*j,c[j+]-C*j)+(a[i]-j)*(a[i]-j);else f[j]=inf;
for(int j=;j<=m;j++)b[j]=min(b[j-],f[j]-C*j);
for(int j=m;j>=;j--)c[j]=min(c[j+],f[j]+C*j);
}
int ans=inf;
for(int i=;i<=m;i++)ans=min(ans,f[i]);
printf("%d",ans);
return ;
}

【BZOJ】1705: [Usaco2007 Nov]Telephone Wire 架设电话线的更多相关文章

  1. bzoj 1705: [Usaco2007 Nov]Telephone Wire 架设电话线——dp

    Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...

  2. BZOJ 1705: [Usaco2007 Nov]Telephone Wire 架设电话线 DP + 优化 + 推导

    Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...

  3. 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>= ...

  4. 1705. [Usaco2007 Nov]Telephone Wire 架设电话线

    传送门 显然 $dp$,首先设 $f[i][j]$ 表示当前考虑到第 $i$ 个电线杆,高度为 $j$ 时的最小代价 那么有转移 $f[i][j]=f[i-1][k]+cost+C(j-k)$,其中 ...

  5. bzoj1705[Usaco2007 Nov]Telephone Wire 架设电话线(dp优化)

    1705: [Usaco2007 Nov]Telephone Wire 架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 441  Solved: ...

  6. BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP

    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...

  7. DP+滚动数组 || [Usaco2007 Nov]Telephone Wire 架设电话线 || BZOJ 1705 || Luogu P2885

    本来是懒得写题解的…想想还是要勤发题解和学习笔记…然后就滚过来写题解了. 题面:[USACO07NOV]电话线Telephone Wire 题解: F[ i ][ j ] 表示前 i 根电线杆,第 i ...

  8. bzoj 1705;poj 3612:[Usaco2007 Nov]Telephone Wire 架设电话线

    Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...

  9. 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线

    可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...

随机推荐

  1. win7 64位在线编辑dsoframer控件的安装和使用配置

    经历了两天的折磨,查阅了网上的资料,按网上的操作试了n种方法结果还是不行,开始以为是dsoframer 是32位控件问题,结果不是(经历了更改解决方案cpu,发布基于x86的网站:以为是操作系统问题, ...

  2. PokeCats开发者日志(十)

      现在是PokeCats游戏开发的第三十三天的中午,收到了中国版权保护中心软件登记部发来的受理通知书.   上易版权看一眼,貌似离拿证不远了.   想一想还有点小激动呢!

  3. 基于3D卷积神经网络的人体行为理解(论文笔记)(转)

    基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...

  4. centos7 安装 httpd并打开测试页

    systemctl start firewalld.service#启动firewallsystemctl stop firewalld.service#停止firewallsystemctl dis ...

  5. Linux文件传输FTP详解

    ftp命令用来设置文件系统相关功能.ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相 ...

  6. SQL SERVER技术内幕之5 表表达式

    表表达式是一种命名的查询表达式,代表一个有效的关系表.可以像其他表一样,在数据处理语句中使用表表达式.SQL Server支持4种类型的表表达式:派生表(derived table).公用表表达式(C ...

  7. mysql+navicat安装小结

    1,mysql到官方下载,navicat下载破解版 2,修改my.ini, 注意,需要手动创建data文件夹, 其中C:\MySql\mysql-5.7.17-winx64是解压mysql的目录 [m ...

  8. hibernate映射表

    <?xml version="1.0"?>   <!DOCTYPE hibernate-mapping PUBLIC        "-//Hibern ...

  9. matlab怎么选取excel的特定列构成数组

    例如:

  10. git & configs

    git & configs https://alvinalexander.com/git/git-show-change-username-email-address https://stac ...