考试总结-3

考试总结-3

又炸了。。(其实我考好时不发总结。。。咳咳)

题目链接🔗

pdf有着更好的阅读效果。。。🔗

T1(最近数学题好多啊)

一个小结论题,其实讲过之后还是蛮简单的。

题解:我们会发现一个事情,$B^i\%​(B-1)=1$  。然后从​$ 0 $到$ (B-1) $​每个数都至少出现$ 1 $​次。我们求的和就是$ \sum a[i]*i*B^i $​,然后因为上面那条,所以只要满足$ \sum a[i]*i $​是$(B-1)$​的倍数就行。为了使最后的数最大,我们尽量删去尽可能少的数。所以删去的数就是$\sum a[i]*i$%​ $(B-1)$。然后找的时候直接二分就好了。。

反思:1.考试时想到了第一步,但没能继续思考剩下的如何处理。对于数学题还是一贯的蒙圈。。。

2.好多人因为没开​$ long\  long $导致丢了好多分,要注意看数据范围。

T2(暴力没拿满。。。)

理论上还是个水题。可我就是个。。(算了,不侮辱蒟蒻这个词了。。)

题解:50% 瞎搞可过。

100% 考虑DP。

​$ m=1 $​时,$ f[i][j] $表示到取到第​$ i $块,一共咬了$ j $​口时能吃到的最大权值和。

转移:不选:$ f[i][j]=max(f[i][j],f[i-1][j]) $

选: ​$ f[i][j]=max(f[i][j],f[k][j-1]+s[i]-s[k-1])\  1\le k\le i-1 $

(​$ s[i] $为前缀和数组)

​$ m=2 $时,​$ f[i][j][l] $表示第一列吃到第$ i $​块,第二列吃到第​$ j $块,一共咬了$ l $​口时能吃到的最大权值和。

转移: 当什么都不做时:$ f[i][j][l]=max(f[i][j][l],f[i][j-1][l],f[i-1][j][l]) $

当仅从第一行取一段区间时:

​$ f[i][j][l]=max(f[i][j][l],f[k][j][l-1]+s[i][1]-s[k][1]) \ 1<=k<=i-1 $

当仅从第二行取一段区间时:

​$ f[i][j][l]=max(f[i][j][l],f[i][k][l-1]+s[j][2]-s[k][2]) \  1<=k<=j-1 $   

当$i=j$​时,可以竖着转移:

​$ f[i][j][l]=max(f[i][j][l],f[k][k][l-1]+s[i][1]+s[j][2]-s[k][1]-s[k][2]) \  1<=k<=i-1 $

最后所有情况取​即可。

反思:1.白送的50没拿到……对自己无语ing。在前缀和序列里查询时要从$ 0 $​开始,要不然会自动忽略​$ a[1] $......(55555....)

2.对于DP的掌握程度不够,不敢写正解,怕暴力错。。

T3 (难度还(hao?)行(da?))

据JZYshuraK介绍,这题死难死难的。。。然后。。342和Ysy20021208都切了。。本蒟蒻都没怎么想。。。

题解:还以为是一眼逆序对,(woc...逆序对差点写不出来了。。),后来惊讶的发现,差了点东西。。

实际上是在逆序对的基础上做的一道题。我们用$ pos[i] $记录每个数的位置。

我们可以从小到大枚举,假设该数最大,使它成为序列的一个结尾,显然最小的数产生的逆序对数量等于​$ pos[i]-1 $,它成为最大值之后会增加$ n-pos[i] $​个新的逆序对,所以我们可以先求出原先序列的逆序对, 然后从小到大枚举数为最大数, 修改逆序对的数量, 然后取$min$。

反思:没有好好读题。。。没有合理分配时间。

posted @ 2018-10-25 16:57  sky20030724  阅读(137)  评论(0编辑  收藏  举报