【BZOJ】1705: [Usaco2007 Nov]Telephone Wire 架设电话线
【题意】给定一排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 架设电话线的更多相关文章
- 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 <= ...
- 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>= ...
- 1705. [Usaco2007 Nov]Telephone Wire 架设电话线
传送门 显然 $dp$,首先设 $f[i][j]$ 表示当前考虑到第 $i$ 个电线杆,高度为 $j$ 时的最小代价 那么有转移 $f[i][j]=f[i-1][k]+cost+C(j-k)$,其中 ...
- 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的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...
- DP+滚动数组 || [Usaco2007 Nov]Telephone Wire 架设电话线 || BZOJ 1705 || Luogu P2885
本来是懒得写题解的…想想还是要勤发题解和学习笔记…然后就滚过来写题解了. 题面:[USACO07NOV]电话线Telephone Wire 题解: F[ i ][ j ] 表示前 i 根电线杆,第 i ...
- bzoj 1705;poj 3612:[Usaco2007 Nov]Telephone Wire 架设电话线
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...
- 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线
可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...
随机推荐
- win7 64位在线编辑dsoframer控件的安装和使用配置
经历了两天的折磨,查阅了网上的资料,按网上的操作试了n种方法结果还是不行,开始以为是dsoframer 是32位控件问题,结果不是(经历了更改解决方案cpu,发布基于x86的网站:以为是操作系统问题, ...
- PokeCats开发者日志(十)
现在是PokeCats游戏开发的第三十三天的中午,收到了中国版权保护中心软件登记部发来的受理通知书. 上易版权看一眼,貌似离拿证不远了. 想一想还有点小激动呢!
- 基于3D卷积神经网络的人体行为理解(论文笔记)(转)
基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...
- centos7 安装 httpd并打开测试页
systemctl start firewalld.service#启动firewallsystemctl stop firewalld.service#停止firewallsystemctl dis ...
- Linux文件传输FTP详解
ftp命令用来设置文件系统相关功能.ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相 ...
- SQL SERVER技术内幕之5 表表达式
表表达式是一种命名的查询表达式,代表一个有效的关系表.可以像其他表一样,在数据处理语句中使用表表达式.SQL Server支持4种类型的表表达式:派生表(derived table).公用表表达式(C ...
- mysql+navicat安装小结
1,mysql到官方下载,navicat下载破解版 2,修改my.ini, 注意,需要手动创建data文件夹, 其中C:\MySql\mysql-5.7.17-winx64是解压mysql的目录 [m ...
- hibernate映射表
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibern ...
- matlab怎么选取excel的特定列构成数组
例如:
- git & configs
git & configs https://alvinalexander.com/git/git-show-change-username-email-address https://stac ...