考试总结 模拟58

T1「试除法」

可以发现m只有200,不难猜到复杂度是 $O(msqrt{a_i})$

只需要把每个数$O(sqrt{a_i})$试除法,求一下约数并且记录一下每个数作为约数出现了多少次即可,用map实现多了个$log$

当然也可以开数组记录,由试除法推论,一个数N的约数个数最多为$2sqrt{N}$,所以开1e7左右即可,

T2 「背包DP」

 我背包DP就没会过考场上只能死板地摸(mo)索(xie)了板子苟到了40分

这个思路很好,之前的都是$f[cost]=max-val$,由于cost很大,那么就可以把下标和值换一下,再跑DP

1 for(int i=1;i<=n;++i){
2     for(int j=n*single_val;j>=1;--j){
3         f[j]=min(f[j],f[j-val[i]]+cost[i]);
4     }
5     for(int j=n*single_val;j>=1;--j){
6         f[j]=min(f[j],f[j+1]);
7     }
8 }

离线一下,每次lower_bound复杂度$O(n^2v+qlog{nv})$

T3什么点分支,并查集的思路出想了好几次,模拟41 T2 影子

愿你在迷茫时,记起自己的珍贵。
原文地址:https://www.cnblogs.com/casun547/p/11620336.html