JZOJ[8.16比赛]题解

来源:互联网 发布:gsk数控机床仿真软件 编辑:程序博客网 时间:2024/06/01 16:55

第一题:作弊

这题我们可以用一个循环来枚举当这个回文字串中间位为i的最长情况,两重循环也不会超时,就这样一直枚举下去,找出最长的那个字串,就输出即可。

第二题:最大杂置

我们只有细心枚举样例数据是怎样得来的,便可发现n[i]就等于杨辉三角第n[i]+1行的中间数,根据这个规律,我们就可以求出答案了。

第三题:投影

这题看着会觉得很难,但仔细看样例其实跟之前做过的围墙翻新比较相似,我们只需保留读入的y,然后用一个双重循环,依次判断当前i和当前j是否相等,如果相等且之前没有找过,就标记。

第四题:除草

这题我们需要用到动态规划,设f[i,j,1]表示已经把从i到j的草除完,且现在正在i点;f[i,j,2]表示已经把从i到j的草除完,且现在正在j点;那么我们可以根据它的每种情况推出状态转移方程:

if i<j then 

f[i,j,1]:=min(f[i+1,j,1]+(p[i+1-p[i])*(n-j+i),f[i+1,j,2]+(p[j]-p[i])*(n-j+i));

f[i,j,2]:=min(f[i,j-1,1]+(p[j]-p[i])*(n-j+i),f[i,j-1,2]+(p[j]-p[j-1])*(n-j+i));

注意:p数组要先按从小到大排好,且f[i,i,1]=f[i,i,2]=abs(l-p[i])*n;



1 0
原创粉丝点击