NOIP2018模拟9.18

35+45+0

比较低迷了啊,归根到底还是没怎么认真。

第一题想得太快了,想到了正解但是没想好细节,打错了之后换暴力,还没有拿完部分分,血亏。

第二题思想方向错了。

第三题题意读错,调不出来。

这个状态很糟糕。

T1:

给出n个正整数,每个数可以选或不选,对于所有可重的有序三元组(x,y,z),如果x、y、z都被选了,那么可以产生(1/x+1/y+1/z)*(x^2+y^2+z^2)的贡献,否则会产生(3*x+3*y+3*z)的贡献。求最大贡献以及最大贡献下选择的最小数的数量。

n<=1e7

题解:

首先,贡献最大的情况就是全选。用基本不等式弄一下即可。

当然如果全部数相同,那么全部不选贡献也是一样大的。

仅考虑选的情况,拆开式子可以发现答案与数的和、平方和、倒数和有关,分别维护就行了。

复杂度O(n)

T2:

 给出两个分数x、y初始都是0,每天可以选择x+1或者y+1,有n种奖励,每个奖励形如(xi,yi,zi)表示如果某天你的x分数大于等于xi,y分数大于等于yi,那么你在那天可以获得zi的分数。一共有m天。求最大分数。

n<=2000,m,xi,yi<=1e9,zi<=10000

题解:

可以想到m^2dp,设f[i][j]表示x=i,y=j时的最大分数,根据意义转移即可。

当然可以n^2预处理出x=i,y=j时的每天增加的分数。

观察可以发现,上述dp的转移很多时候一大段时间都是相同转移,很冗余。

有用的x和y的值分别最多只有n个,所以离散化一下,做上述dp就好了。

复杂度O(n^2)

T3:

给出一棵n个节点的树,每个点上有一个权值,以1为根。

可以有删除操作,就是指当节点x的所有儿子都为叶子节点的时候,可以把所有儿子删除。

将最终树的dfs序求出来,价值为所有叶子的权值和减去dfs序上相邻两个叶子的路径(不包括两个叶子)上的最大点权。

求最大价值。

n<=2e5

题解:

发现删除操作的意义就是:每个叶子到根节点的路径上只能有1个点成为最终树的叶子。

也就是说树上的点x要作为叶子,设在原dfs序上x的前方上一个叶子为y,能够成为新树上x的前一个叶子的,只能是y—>lca(x,y)(不包括lca(x,y))上的点。

我们可以设一个dp,f[x]表示,以x这个节点作为新树dfs序上的最后一个点的价值。

转移就是从可能的上一个叶子上转移。

直接暴力是n^2的,我们发现转移区域是一条链。

我们把这条链弄出来,发现转移的不同仅仅与两点路径上的最大值有关。

那么链上的区域可以分为两段,一段是以lca(x,y)—>x上的点作为最大值的,一段是以y—>lca(x,y)上的点作为最大值的。

发现这个其实可以用一个后缀最大值表示,再加一个指针扫一下就行了。

复杂度变成了O(n)

猜你喜欢

转载自www.cnblogs.com/lmlysklt/p/9694430.html