P2885】的更多相关文章

P2885 [USACO07NOV]电话线Telephone Wire 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= N <= 100,000)根电话线杆上, 第i根电话线杆的高度为height_i米(1 <= height_i <= 100).电话线总是从一根电话线杆的顶端被引到相邻的那根的顶端 如果这两根电话线杆的高度不同,那么FJ就必须为此支付 C*电话…
2885 code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; background: #f5f5f5; } .token.comment, .token.blockquote { color: #969896; } .token.cdata { color: #183691; } .token.doctype, .token.punctuation, .token.var…
题目: https://www.luogu.org/problemnew/show/P2885 由于把每一根电线杆增加多少高度不确定,所以很难直接通过某种方法算出答案,考虑动态规划. 状态:f [ i ] [ j ]表示当第i根电线杆的高度为j时的最小代价和. 转移:当前电线杆的高度只会影响它下一个电线杆的高度,所以就是用前一维的答案来更新后一维.在计算第i根电线杆和第i-1根电线杆时需要计算三部分答案:1.将第i根电线杆增加到j高度的代价 ( j - h [ i ])*(j - h [ i ]…
解题思路 首先很容易就想到了一个二维的朴素的 $dp$. 设 $dp[i][j]$ 表示第 $i$ 个位置的电话线杆的高度为 $j$ 时的最小花费,就需要枚举第 $i$ 个电话线杆.第 $i$ 个电话线杆的高度 $j$.第 $i-1$ 个电话线杆的高度 $k$. 状态转移方程如下 $$dp[i][j] = \min \{dp[i-1][k]+|j-k|\times c + (j-h[i])^2\}$$ 但是这样的 $dp$ 过不了这题的数据范围.这个 $dp$ 的时间复杂度是 $\text{O}…
本来是懒得写题解的…想想还是要勤发题解和学习笔记…然后就滚过来写题解了. 题面:[USACO07NOV]电话线Telephone Wire 题解: F[ i ][ j ] 表示前 i 根电线杆,第 i 根电线杆长度为 j 时的最优答案 容易推出基本的转移方程: mx为初始最长的电线杆长度,显然延长后的电线杆最长不会超过mx 然后就把绝对值拆开,分类讨论一下 然后就发现这个东西可以单调队列优化DP,但是这个题目并不需要单队优化,在循环时记录一下最大值就可以 然后因为给的空间就64MB,所以要套一个…
菜鸡 wxw 的计划(肯定会咕咕咕 12.27 luogu P4244 [SHOI2008]仙人掌图 II(咕咕咕 luogu P4246 [SHOI2008]堵塞的交通 (没有咕! luogu P1848 [USACO12OPEN]书架Bookshelf(不咕! 12.28 一场 cf 虚拟比赛(div.2 rk 18) 一场 cf div.2,用的是小号(i_am_sooke)(rk 20) 题解在这里 sooke 看到我小号的用户名貌似不太开心 qaq 我好菜啊 qaq 12.29 luo…
可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= N <= 100,000)根电话线杆上, 第i根电话线杆的高度为height_i米(1 <= height_i <= 100). 电话线总是从一根电话线杆的顶端被引到相邻的那根的顶端 如果这两根电话线杆的高度不同,那么FJ就必须为此支付 C*电话线杆高度差(1 &…
http://cogs.pro:8080/cogs/problem/problem.php?pid=2240 与洛谷P2885几乎一致,https://www.luogu.org/problemnew/show/P2885,双倍经验. 定义dp[i][j]表示前i棵树的最大花费并且第i 棵树高度为j的. 我们可以想到这某一棵树的高度与它前边的树有直接的关系,不难有一种想法. 枚举第几棵树1->n 枚举每棵树的高度$h[i]-> max \{ h[1],h[2]...h[n] \} $ 枚举第i…
P2885 [USACO07NOV]电话线Telephone Wire 给出若干棵树的高度,你可以进行一种操作:把某棵树增高h,花费为h*h. 操作完成后连线,两棵树间花费为高度差*定值c. 求两种花费加和最小值. 输入输出样例 输入 #1复制 5 2 2 3 5 1 4 输出 #1复制 15 sol:显然暴力的dp很容易得到,dp[i][j]表示第i个高度为j个最小代价 #include <bits/stdc++.h> using namespace std; typedef int ll;…