7月18日模拟赛总结
here.
T1 如果没有 INF 的情况,那么这题就是个完全背包。现在考虑什么情况下会有无数种凑不出的数。观察样例二可以发现所有数都是偶数,这样所有奇数都凑不出。事实上,将其推广一下即可发现,当且仅当所有数 \(\gcd=1\) 时,才能凑不出有限个数。
首先证明必要性,当 \(\gcd \neq 1\) 时,说明所有数至少有一个公约数 \(d(d>1)\),此时凑出来的数显然总是 \(d\) 的倍数,即非 \(d\) 的倍数都凑不出,显然这就有无限个了。
证明充分性,根据裴蜀定理可知,有 \(\sum ^n_{i=1} a_ix_i=y\),其中 \(\gcd(\{a_i\})=1\),而 \(y\) 是整数,意味着它一定为 \(1\) 的倍数,从而上述方程 \(x_i\) 有无数组整数解,自然也就只有有限个 \(y\) 没有自然数解了。换言之,在 \(\gcd(\{a_i\})=1\) 的前提下,\(\sum a_i\) 及以上的数都可以被凑出。Q.E.D.
根据上述结论判断 INF 情况即可。
T2 最大生成树。
T3 数位 dp。令 \(dp_{i,j,0/1}\) 表示当前为第 \(i\) 位,\(1\) 的个数为 \(j\),当前受(\(0\))/不受(\(1\))约束(就是这一位能不能随便填),还要一个类似的、但是维护总和的状态 \(f\)。
初始 \(dp_{N,0,0}=1\),\(N\) 为位数(从高位到低位转移),答案 \(f_{0,k,0}+f_{0,k,1}\)。
转移时,首先要在做之前确定能不能随便填,接着 \(dp\) 直接从前面那个拉过来求和即可。\(f\) 类似,只是还需要加上这一位的和 \(\times\) 此处的方案数。具体见代码。
T4 树上差分。
成绩:12+100+0+100=212,rk1。重回巅峰了属于是。
总结:
-
dp 总是枚举上一步的状态。
-
利用好样例。

浙公网安备 33010602011771号