Processing math: 100%

XII Open Cup named after E.V. Pankratiev. GP of Eastern Europe (AMPPZ-2012)

A. Automat

m超过1600是没用的。

从后往前考虑,设f[i][j][k]表示考虑[i,n]这些物品,一共花费j元钱,买了k个物品的最大收益。

时间复杂度O(n5)

  

B. Touristic Bureau

将所有景点按照有趣度从小到大排序,设f[i]表示走到i的最大获利,则f[i]=max(f[j]+manhattan(i,j))+c[i](j<i)

枚举曼哈顿距离里xy的符号,分别维护最大值即可。

时间复杂度O(nm)

  

C. Sequence

下标模k相同的位置最后要一样,故直接将序列长度压缩成k然后DP即可。

  

D. DNA

字符集=1最优。

  

E. Evaluation

对表达式递归建树,设f[i][j]表示i子树内运算结果为j的方案数。

对于求幂直接计算。

对于加法可以FFT。

对于乘法可以求出原根后取指标然后转化为加法FFT。

时间复杂度O(nPlogP)

  

F. Formula-1

s[k]为第k辆车最多能进行的超车次数,A[k]表示它前面那些车给s[k]的贡献,B[k]为后面的,则A[k]=k1i=1(a[i]+1)

b[i]为第i辆车为了到k+1这个位置最少需要的超车次数,则b[k+1]=0,b[i+1]=b[i]+[a[i]b[i]],且B[k]=ni=k+1max(a[i]b[i],0)

若对于每个k都有s[k]a[k],则可行。

找出最大的m满足A[m]a[m],则除了m之外所有车都可行,暴力检查m即可。

时间复杂度O(n)

  

G. General

如果凸包大小2,那么特判即可。

否则凸包大小至少为3,对于每个询问,首先在凸包上按极角二分出一条边,看看是否在凸包内或者边上。

如果不在,那么往左往右二分出两条切线的位置,然后用叉积前缀和回答询问即可。

时间复杂度O((n+m)logn)

  

H. Hydra

f[x]为击杀x的最小代价,则f[x]=min(k[x],s[x]+(f[x])),用SPFA来循环更新即可。

  

I. Inversions

线段树优化BFS。

  

J. Procrastination

按时间从后往前贪心安排任务。

  

K. Rabbits

n=3,那么贪心取最大的k个即可。

否则打枪顺序无关,要么第一枪打1,要么第一枪打2,要么打3..n

第一枪打12时,模拟出变化后的情况,并将次数减1,将环当成序列考虑,那么不能在相邻两个位置打枪,若ii2都打枪,那么可以同时打到i1,DP即可。

第一枪打3..n时,可以直接将环当成链DP。

时间复杂度O(nk)

  

posted @   Claris  阅读(739)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示