贪心(未完成)

来源:互联网 发布:沙钢网络培训教育学院 编辑:程序博客网 时间:2024/06/05 11:04

数学公式:http://blog.csdn.net/lanxuezaipiao/article/details/44341645
下面的这些问题我都没打过,只有想过思路,可能会有错。


P1325 雷达安装
https://www.luogu.org/problemnew/show/1325

若竖直距离超过半径直接输出-1。
预处理:以P为圆心,做半径为r的圆,交x轴于q1,q2,则若要覆盖这个点,雷达需在q1q2上。
那么这一题就转化为线段覆盖问题了。对线段右端点进行排序,然后从右往左选取。


P3146 [USACO16OPEN]248
https://www.luogu.org/problemnew/show/3146
给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。

我想到的:每一个联通块(大小大于1,假设为n,数值为i)合并后结果就是二进制下的1的个数个,其中最大的为i+最高二进制位对应的幂。
比如:
10(10)=1010(2)可以分出1+log2321+log212。用树状数组的x-=x&(-x)每次取lowbit,就可以得到这个联通块合并出的结果了。
那么贪心的策略就是每次对最小的非1联通块进行处理,记录并更新最值(取个max),两端如果存在x可以再次合并,就将其移动到x旁边。
但是实现起来好像不太容易,而且感觉并不是最优的…
看下题解发现是道DP题…那就重定向到DP专栏吧
http://blog.csdn.net/uiqrm/article/details/78313830

考虑用区间DP来解决。设dp[i][j]表示区间i j所能获得的最大值。