20210906am

20210906am

被各种不明错误弄得心态崩溃。
请添加图片描述

T1T2T3T4T5T6T7T8T9T10
预测100100100100100100100100100100
一测10010010010090100010000

T1:
先拆环,再区间dp, f i , j = max ⁡ k = i k < j f i , k + f k + 1 , j + s u m j − s u m i − 1 f_{i,j}=\max_{k=i}^{k<j}f_{i,k}+f_{k+1,j}+sum_j-sum_{i-1} fi,j=maxk=ik<jfi,k+fk+1,j+sumjsumi1。复杂度 O ( n 3 ) O(n^3) O(n3)
T2:
01背包板子,特判和为奇数。
T3:
设计状态 f i f_i fi表示时间到 i i i最多能占的时间,每个以 i i i结尾的活动都可以更新。设活动i开始为 s i s_i si,结尾为 t i t_i ti,长度为 l e n i = t i − s i + 1 len_i=t_i-s_i+1 leni=tisi+1,则
f i = max ⁡ t [ j ] = i ( f s [ j ] + l e n j , f i − 1 ) f_i=\max_{t[j]=i}(f_{s[j]}+len_j,f_{i-1}) fi=maxt[j]=i(fs[j]+lenj,fi1)
T4:
一条过去一条回来可以看做两条过去,且一切有交叉的路径可以通过改变顺序变成不交叉的,设计状态 f x 1 , y 1 , x 2 , y 2 f_{x_1,y_1,x_2,y_2} fx1,y1,x2,y2表示一人走到 ( x 1 , y 1 ) (x_1,y_1) (x1,y1),另一人走到 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)的最大好感值,因为两人需一起移动,所以转移方程为 f x 1 , y 1 , x 2 , y 2 = max ⁡ ( f x 1 − 1 , y 1 , x 2 − 1 , y 2 , f x 1 , y 1 − 1 , x 2 − 1 , y 2 , f x 1 − 1 , y 1 , x 2 , y 2 − 1 , f x 1 , y 1 − 1 , x 2 , y 2 − 1 ) + 1 f_{x_1,y_1,x_2,y_2}=\max(f_{x_1-1,y_1,x_2-1,y_2},f_{x_1,y_1-1,x_2-1,y_2},f_{x_1-1,y_1,x_2,y_2-1},f_{x_1,y_1-1,x_2,y_2-1})+1 fx1,y1,x2,y2=max(fx11,y1,x21,y2,fx1,y11,x21,y2,fx11,y1,x2,y21,fx1,y11,x2,y21)+1,发现第四个状态可以通过其他三个算出来,所以空间和时间复杂度都是 n 3 n^3 n3,但对于重合状态需要特判,删掉即可。
T5:
似乎并不需要dp,能跳就跳,分别记录休息和走路,比较哪个大,特判忘向上取整哭了。
请添加图片描述
T6:
和T1差不多的区间dp,每行分别考虑即可,听说ull可以卡过去,虽然我写高精也过了。
请添加图片描述
T7:
最短路加个特判就过了,这输入格式。。。aoj似乎不审题面的啊。。。

T8:
经典,题目下面把做法都贴出来了,太感人了。
请添加图片描述
T9:
这种长相的式子一眼斜率优化,式子转移都推对了,队列最开始有个0点漏了,直接gg。
请添加图片描述

s u m c i sumc_i sumci表示 c c c数组的前缀和,设计状态 f i f_i fi表示考虑到 i i i的最小费用,显然有式子
f i = min ⁡ j = 1 j < i ( f j + ( i − j − 1 + s u m c i − s u m c j − L ) 2 ) f_i=\min_{j=1}^{j<i}(f_j+(i-j-1+sumc_i-sumc_j-L)^2) fi=minj=1j<i(fj+(ij1+sumcisumcjL)2),若令
s u m i = s u m c i + i sum_i=sumc_i+i sumi=sumci+i l = L + 1 l=L+1 l=L+1
f i = min ⁡ j = 1 j < i ( f j + ( s u m i − s u m j − l ) 2 ) f_i=\min_{j=1}^{j<i}(f_j+(sum_i-sum_j-l)^2) fi=minj=1j<i(fj+(sumisumjl)2)
则当 j > k j>k j>k时,若 j j j k k k优,有
f j + ( s u m i − s u m j − l ) 2 < f k + ( s u m i − s u m k − l ) f_j+(sum_i-sum_j-l)^2<f_k+(sum_i-sum_k-l) fj+(sumisumjl)2<fk+(sumisumkl)
移项相消得
f j − f k < s u m k 2 − s u m j 2 + 2 ( s u m i + l ) ( s u m j − s u m k ) f_j-f_k<sum_k^2-sum_j^2+2(sum_i+l)(sum_j-sum_k) fjfk<sumk2sumj2+2(sumi+l)(sumjsumk)
j , k j,k j,k项全部移到左边得
f j + s u m j − f k − s u m k 2 ( s u m j − s u m k ) < s u m i − l \frac{f_j+sum_j-f_k-sum_k}{2(sum_j-sum_k)}<sum_i-l 2(sumjsumk)fj+sumjfksumk<sumil
得到斜率式,因为本题斜率单调上升,所以维护下凸包即可。
贴个转移代码吧

h=t=0;   //开头点是0啊啊啊
for(int i=1;i<=n;i++)
{
	while(h<t&&kk(q[h+1],q[h])<=sum[i]-l) h++;
	f[i]=f[q[h]]+(sum[i]-sum[q[h]]-l)*(sum[i]-sum[q[h]]-l);
	while(h<t&&kk(i,q[t])<kk(q[t],q[t-1])) t--;
	q[++t]=i;
}

T10:
经典,最长上升和最长公共的缝合,做法也差不多。
需要注意,定义 f i , j f_{i,j} fi,j表示 a a a数组到 i i i,与 b j b_j bj配对的最长公共上升子序列,也就是说 i i i是不严格相等的,而 j j j是严格相等的,可以得到转移式
f i , j = { f i − 1 , j a i ≠ b j max ⁡ k < j & & a i > b k ( f i − 1 , k + 1 ) a i = b j f_{i,j}=\begin{cases} f_{i-1,j} & a_i\ne b_j \\ \max_{k<j\And \And a_i>b_k}(f_{i-1,k}+1) & a_i=b_j \end{cases} fi,j={fi1,jmaxk<j&&ai>bk(fi1,k+1)ai=bjai=bj
直接转移复杂度 O ( n 3 ) O(n^3) O(n3),但发现二式只需要一个前缀 max ⁡ \max max就能转移了,记录一下优化至 O ( n 2 ) O(n^2) O(n2)
结果我前缀都能求错,哈哈。请添加图片描述

总结:都是经典例题,斜率优化虽然是个板子但还是有点难度,不错。
请添加图片描述

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值