【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把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...
随机推荐
- unordered_map(hash_map)和map的比较
测试代码: #include <iostream> using namespace std; #include <string> #include <windows.h& ...
- spring框架(2)— 面相切面编程AOP
spring框架(2)— 面相切面编程AOP AOP(Aspect Oriented Programming),即面向切面编程. 可以说是OOP(Object Oriented Programming ...
- RHEL 6.4(i386)安装MySQL 5.6的方法
- PHPcms企业黄页中,会员注册之后提示经营模式不得少于1个字符 的解决办法
后台--模块- 黄页模块 --- 企业库 --- 字段 --- 经营模式 --- 字符长度取值范围 1 改为 0.
- Flink中的数据传输与背压
一图道尽心酸: 大的原理,上游的task产生数据后,会写在本地的缓存中,然后通知JM自己的数据已经好了,JM通知下游的Task去拉取数据,下游的Task然后去上游的Task拉取数据,形成链条. 但是在 ...
- 【bzoj5089】最大连续子段和 分块+单调栈维护凸包
题目描述 给出一个长度为 n 的序列,要求支持如下两种操作: A l r x :将 [l,r] 区间内的所有数加上 x : Q l r : 询问 [l,r] 区间的最大连续子段和. 其中,一 ...
- hdu 1848(Fibonacci again and again)(SG博弈)
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- iphone手机与PC蓝牙出现感叹号且无法修复解决方案
解决方案如下: 1.需要下载Windows Mobile 6.5 的驱动 drvupdate-amd64.exe ,下载需要正版验证,手动安装驱动,具体步骤Google 2. 如果在BlueTooth ...
- [洛谷P1341]无序字母对
题目大意:给一张无向图,找一条字典序最小的欧拉路径 题解:若图不连通或有两个以上的奇数点,则没有欧拉路径,可以$dfs$,在回溯时把这个节点加入答案 卡点:没有在回溯时加入答案,导致出现了欧拉路径没走 ...
- [ZJOJ2007]时态同步 贪心
不是很懂为什么luogu标签是树形DP,感觉我想的就是一个贪心啊... 随机造几组数据,我们发现贪心的确可以得到最优解,那么为什么呢? 假设将所有时态贪心的调整是对的,那么如果一个节点的各个儿子时态不 ...