2020.07.23【省选B组】模拟

T1:首先可以构造出f的转移矩阵b。考虑如果只有一维那么答案就是f*(I+b+b^2...b^(x1-1))的第一位。接着如果有n维那么答案就是f*(I+b+...+b^(x1-1))*(I+b+...+b^(x2-1))*...*(I+b+...+b^(xn-1))的第一位。因为拆开后面的就相当于把第一维到第n维的坐标求和。至于矩阵乘法求前缀和可以参考7.16省选B组T3。

 

T2:这题比较简单,但是我没有想出来。

首先一个简单的想法就是枚举a的不同的两位,异或之后放入hash数组。接着枚举b的每一个数字查询。这样的时间复杂度是O(nlog^2)的。

所以我们平衡规划一下,枚举a不同的一位,加入hash数组,再枚举b的不同的一位,接着在hash数组中查询,最后减去a=b的情况。这样的复杂度就是O(nlogn)了。

 

T3:设一个dp状态:f[i][j]表示前i个x的值已经确定了,并且保证sum(a[i]*x[i])<=j<=sum(a[i]*x[i])的最小sum(c[i])。转移的时候考虑一个怎样的j1可以从f[i-1][j1]转移到f[i][j]。因为j1+a[i]<=j<=j1+b[i],那么j-b[i]<=j1<=j-a[i]。确定了j1的范围之后就可以发现这个dp方程可以用单调队列求最小值来优化,这样这题就做完了。

你可能感兴趣的:(【NOIP提高组】模拟A组)