Noip模拟2 2018/10/18

本文解析了三道算法竞赛题目,包括矩阵递推、数列优化与图论问题,详细阐述了解题思路与高效算法设计,适用于算法爱好者与竞赛选手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1:Matrix
小z 的女朋友送给小z 一个n×nn×nn×n的矩阵。但是矩阵实在太大了,小z 的女朋友拿不动,只能带给他两个长度为n 的整数序列l,t,分别作为矩阵F的第一行和第一列(保证 l1=t1l1=t1l1=t1),并且告诉小z 矩阵可以通过如下方式得到:F(i,j)=a∗F(i,j−1)+b∗F(i−1,j)F(i,j)=a∗F(i,j−1)+b∗F(i−1,j)F(i,j)=aF(i,j1)+bF(i1,j)
现在小z 猜到了系数a,b,他想要计算F(n,n)F(n,n)F(n,n)109+710^9+7109+7的值。

忽然想不起从(0,0)(0,0)(0,0)(n,m)(n,m)(n,m)的路径数了,数组开小……
对于一个l[i]l[i]l[i],通过大力推式子可以发现一定会乘上an−1∗bn−ia^{n-1}*b^{n-i}an1bni
对于t[i]t[i]t[i],则一定会乘上an−i∗bn−1a^{n-i}*b^{n-1}anibn1
然后考虑对于每一个值,会对答案造成多少贡献
可以发现,每一个值的贡献次数就是这个位置到(n,n)(n,n)(n,n)的路径数
以该位置为起点,那么就是从(0,0)(0,0)(0,0)(n−1,n−i)(n-1,n-i)(n1,ni),但是第一步是固定的
那么就成了从(0,0)(0,0)(0,0)(n−1,n−i−1)(n-1,n-i-1)(n1,ni1)
类似蚂蚁路径,方案数为C(2∗n−i−2,n−2)C(2*n-i-2,n-2)C(2ni2,n2)即为对答案的贡献次数

T2:pq
小q 的女朋友送给小q n个整数。但是这些数太大了,小q 的女朋友拿不动,于是拜托小q把这些数减少一些。
小q 每次可以选择其中的两个x,y (不能同时选择同一个数) 变成x−P,y−Q,现在他希望能知道最多能帮女朋友减掉多少P,Q。

f[i][j][k]f[i][j][k]f[i][j][k]表示处理到第iii个数,还有jjjPPPkkkQQQ没处理,存的是已经处理的个数
可以发现,如果PPP的个数为000,那么QQQ的个数的最大值不会超过200020002000
如果QQQ的个数为000,那么PPP的个数的最大值不会超过200020002000
如果都不为零,那么P,QP,QP,Q的个数都不会超过404040
根据这个性质,我们可以暴力把s[i]s[i]s[i]拆成xxxPPPyyyQQQ
分类讨论xxxjjjyyyiii的大小,然后统计答案
但是数组50∗2000∗200050*2000*20005020002000会炸,因为每一次只会有i−1i-1i1对答案造成贡献,可以把i滚动掉
时间效率O(n∗(2000+2000+402)∗50)O(n*(2000+2000+40^2)*50)O(n(2000+2000+402)50)

T3:graph
小f 的女朋友送给小f 一个有n个点m条边的无向图。但是这个无向图太大了,小f 的女朋友拿不动,于是小f 希望只保留图的一部分。在这张图上,对于第i条边ui,viui,viui,vi,从uiuiuivivivi的代价为aiaiai,从viviviuiuiui的代价为bibibi
小f 希望只保留一个包含1号点的有向环(不能有重复的点),使得环上代价之和最小。

因为环中一定有节点111,那么就从1开始大力DFS,数组开够有656565%
那么我们可以把111拆成222个点,暴力枚举环上与111相连的两点,取最小值,效率为O(n3log⁡n)O(n^3 \log n)O(n3logn)252525%
然后考虑优化
我们可以把与111相连的点分成两部分,然后跑最短路,但是有可能最短的两个点在一个集合中,考虑优秀的分组方式
考虑按位分组,可以保证对于任意的Vi!=UiVi!=UiVi!=Ui都一定会有一次分在不同的两组,需要分成(logn)(log n)(logn)组,然后统计最小值即可
时间效率O(nlog⁡n2)O(n \log n^2)O(nlogn2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值