题目链接 uoj233 题解 下面不加证明地给出几个性质: 小于\(h[1]\)的城市一定是没用的 任何城市联通包含\(1\)且只和\(1\)联通一次 联通顺序从小到大最优 单个联通比多个一起联通要优 最优解中多个一起联通不超过\(14\)次 除了最后一个外还是很显然的 \(K\)足够大肯定逐个联通,否则有一些还是需要一起联通的 我们可以设\(f[i][j]\)表示前\(i\)个城市,联通\(j\)次\(h[1]\)的最高高度 那么,去掉小于\(h[1]\)的城市,将\(h[i]\)排序,记\(…
LINK:国王饮水记 看起来很不可做的样子. 但实际上还是需要先考虑贪心. 当k==1的时候 只有一次操作机会.显然可以把那些比第一个位置小的都给扔掉. 然后可以得知剩下序列中的最大值一定会被选择. 考虑是否选出其他数字 容易想到如果选择了必然要比拿到最大的之后的平均数要大. 这样贪心下去即可. 考虑当k不等于1的时候. 设\(f_i\)表示第i次使用过后的最大值.显然有\(f_i>f_{i-1}\) 那么由此我们得到某个点至多被选择一次 再选择没有任何收益. 所以k可以对n取min. 此时观察…
蒟蒻的第一篇黑题题解,求过. 题目链接 题意描述 这道题用简洁的话来说,就是: 给你 \(n\) 个数字,你可以让取其中任意若干个数字,每次操作,都会使所有取的数字变为取的数字的平均数,并且你最多只能进行 \(k\) 次操作,你要在这经过最多 \(k\) 次操作后使得给你的第一个数字变得最大.输出保留 \(p\) 位的第一个数字的最后状态. 贪心策略(非正解,有助后面做题) 我们暂且不研究这道题的正解是什么,我们先看看怎么样贪心能够使得第一个数字变得最大. 首先,比第一个数字小的我们一定不需要,…
[UOJ#223][BZOJ4654][Noi2016]国王饮水记 试题描述 跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中.跳蚤国最大的问题就是饮水问题,由于首都中居住的跳蚤实在太多,跳蚤国王又体恤地将分配给他的水也给跳蚤国居民饮用,这导致跳蚤国王也经常喝不上水.于是,跳蚤国在每个城市都修建了一个圆柱形水箱,这些水箱完全相同且足够高.一个雨天后,第 i 个城市收集到了高度为 hi 的水.由于地理和天气因素的影响,任何两个不同城市收集到的水高度互不相同.跳蚤国王也请来蚂…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中.跳蚤国最大的问题就是饮水问题,由 于首都中居住的跳蚤实在太多,跳蚤国王又体恤地将分配给他的水也给跳蚤国居民饮用,这导致跳蚤国王也经常喝 不上水.于是,跳蚤国在…
有很多比较显然的性质.首先每个城市(除1外)至多被连通一次,否则没有意义.其次将城市按水位从大到小排序后,用以连通的城市集合是一段前缀,并且不应存在比1城市还小的.然后如果确定了选取的城市集合,每次选择也应该是连续的一段,且应从小到大选,这样保证了将其他城市的水尽量分到1,而不是被另外的城市分流.同时也说明如果不考虑次数限制应该划分的尽量多. 考虑怎么用这些性质做.按水位从小到大排序,考虑大力dp,即设f[i][j]为前i个城市(可以不全选)分了j组时的答案,转移即f[i][j]=max{(f[…
来自FallDream的博客,未经允许,请勿转载,谢谢. 跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中.跳蚤国最大的问题就是饮水问题,由于首都中居住的跳蚤实在太多,跳蚤国王又体恤地将分配给他的水也给跳蚤国居民饮用,这导致跳蚤国王也经常喝不上水.于是,跳蚤国在每个城市都修建了一个圆柱形水箱,这些水箱完全相同且足够高.一个雨天后,第 i 个城市收集到了高度为 hi 的水.由于地理和天气因素的影响,任何两个不同城市收集到的水高度互不相同.跳蚤国王也请来蚂蚁工匠帮忙,建立了一…
题目链接 斜率优化+1,好吧不水分了. 玩具装箱那题以后再做,当作复习吧. \(f[i]=f[j]-(sum[i]-sum[j])*dis[i]+p[i]\) \(f[j]=-dis[i]*sum[j]+sum[i]*dis[i]+f[i]-p[i]\) #include <cstdio> #include <algorithm> using namespace std; #define ll long long const int MAXN = 1000010; inline i…
题目链接 假设有\(3\)段\(a,b,c\) 先切\(ab\)和先切\(bc\)的价值分别为 \(a(b+c)+bc=ab+bc+ac\) \((a+b)c+ab=ab+bc+ac\) 归纳一下可以发现切的顺序并不影响总价值. 于是设\(f[i][j]\)表示前\(i\)个数切\(j\)次的最大价值,转移方程就很简单了. 然后斜率优化一下就能降时间复杂度降到\(O(nk)\) \(f[i][j]=f[k][j-1]+sum[k]*(sum[i]-sum[k])\) \(f[k][j-1]-su…
传送门 先写出转移方程$$dp[i]=max\{dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c\}$$ 假设$j$比$k$更优,则有$$dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c>dp[k]+a*(sum[i]-sum[k])^2+b*(sum[i]-sum[k])+c$$ 展开,并消去同类项之后得$$dp[j]-2*a*sum[i]*sum[j]+a*sum[j]^2-b*sum[j]>dp[k]-2…