T1:纯暴力模拟。不过要注意原根为1和m=1的特殊情况。
总结:以后每一种情况都要在纸上写清楚,不能空想。
T2:二分+状压dp。
二分一个mid,表示最矮高度。接着设f[i][j]表示1~i位置的土都达到mid,而i-k+1~i种土的选择方案为j的最小价钱。这是我们用f[i][j]去更新f[i+1]。
我们需要考虑第i+1种土是选还是不选。若不选,则更新的是f[i+1][j>>1](我们删掉i-k+1种土,加上i+1种土),若选,则更新的是f[i+1][j>>1+(1<<(k-1))]。
状态转移方程:f[i+1][j>>1]=f[i][j],f[i+!][j>>1+(1<<(k-1))]=f[i][j]+c[i+1]。
不过在什么条件下才能更新呢?
首先,我们要判断钱不超限,也就是f[i][j]+c[i+1]<=m。
然后,我们要判断i+1位置的土达到mid的高度。i+1位置的高度我们可以通过i+1对应的j来计算(可以影响到i+1位置的土只有i-k~i+1,而i+1对应的j正好表示的是这一状态)。
最后如果f[n]中有一个被更新,那么这个mid是成立的。
总结:
1、这题虽然n很大,有100,所以不好进行状态压缩。但是能影响i位置的,只有k种土,因为k很小,只有11,所以可以进行状态压缩。如果发现dp有什么不确定因素,可以找出说这些因素,通过增加状态来解决它们。
T3:二分+bfs求最短路。先二分答案,然后用bfs求一个最短路,如果这个最短路=L,那么这个答案就是合法的。