8.9JZOJNOIP模拟

来源:互联网 发布:福建游龙网络 编辑:程序博客网 时间:2024/06/05 14:28

第一题:最大配对

分析:这题做法非常明显,我们可以明显看出要使差最大需取未取最大的b[j]和最小的a[i]差以及最大的a[i]与最小b[j]差的较大值(1<=i,j<=n)。我们可以将a与b排序,再比较一下取较大值。

第二题:旅行

分析:这一题是之前一套教主模拟题中一题的变形(虽然做法完全不同)我们可以发现题目的交换实际是将前面的一个数插入到后面,而在这个数的之前的位置和插入后的位置的区间内不能有其他数字向后插入。我们可以从后往前做dp(如果从前往后做前面的插入会对后面产生影响,会使做法更复杂)设f[i,1]为a[i]向后插入时从i到n的最小体力消耗设f[i,0]为a[i]不向后插入时i到n最小的体力消耗先用前缀和预处理出从1走到i(1<=i<=n)不交换位置所需的体力值

f[i,0]=min(f[i+1,0]+abs(a[i+1]-a[i]),f[i+1,1]+abs(a[i+2]-a[i])) 

f[i,1]=min(f[j+1,0]+abs(a[j+1]-a[i])+abs(a[j]-a[i])+sum[j]-sum[i+1]-abs(a[j]-a[j+1]),f[j+1,1]+abs(a[j+2]-a[i])+abs(a[j]-a[i])+sum[j]-sum[i+1]-abs(a[j]-a[j+2]))(i<j<=n)(j=n时因无j+1需特殊判断一下,没有公式编辑所以不用数学符号。。。)

第三题:资源勘探

分析:我们可以发现在某种资源在当前行数出现过的最小列数到次小列数-1是这种资源为珍稀资源的情况,我们可以扫一下比较一下当前所在列数与最小列数与次小列数的大小,更新最小与次小列数以计算答案。

第四题:排列统计

分析:我们可以将b[i]看成一个矩阵以[1,1]为左上角以[i,i]为右下角中1的个数,我们可以将矩阵拆分为若干层即若干L字型从内到外做一次dp设f[i]为填充到当前层的方案数

当b[i]-b[i-1]=0时当前层不需填充1则f[i]=f[i-1]

当b[i]-b[i-1]=1时当前层需要填充一个不与之前填充1行列相同的1则f[i]:=f[i-1]*(2*i-1-2*b[i-1])

当b[i]-b[i-1]=2时当前层需要填充除行列交点外的两个区间各一个不与之前填充1行列相同的1则f[i]:=f[i-1]*(i-1-b[i-1])*(i-1-b[i-1]);

答案很大需使用高精度


做这套题时看到题就觉得第一题可以切掉,但后三题没什么想法

第二题一开始看到题就想到DP但是想的是从前往后做就不知道该怎么做了就打了搜索,当前面的转移对后面有影响时应该想想从后往前做的方法,打开一条新的思路。第二题的搜索拍了一些手写的小数据,没有出比较特殊的数据就挂掉了,而且想的不够全面,没将交换后的影响完全考虑到

第三题 打了一个暴力(实际上后面想了想觉得最小和次小列数这个比较明显,比赛时没想到,应该多分析一些小数据或是样例,可以得出一些结论)

第四题 想了一会儿没有想法就没做虽然剩下的时间不多也应该打一个水法尝试拿分

0 0
原创粉丝点击