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 影子