CF708D2

D题

题很好感觉思维得到了升华把整个题考虑成一个图对每对$\{i, j\}$只要tag[i] != tag[j]他们之间就要连边边权为$|2^i-2^j|$按照题意需要找一条边权不断上升的$\sum|s_i-s_j|$最大的路由于边权不断上升可以将边按边权排序外层$i$从小到大内层$j$从大到小然后使用动态规划dp[i][t]维护只使用前$t$条边时终点为$i$的路的路径权值最大值考虑转移发现$t$增加$1$时只有至多两个dp值会发生变化因为一步只引入了一条边而且它只能被加在已经考虑过的路径的末尾这样我们可以舍弃$t$维度而代之以时间维度$dp$数组只有一维dp[i]维护当前时刻以$i$结尾的路的路径权值最大值每当时刻前进1就新考虑一条边更新一下dp[i]dp[j]$dp_i = \max(dp_i, dp_j + |s_i - s_j|)$$dp_j=\max(dp_j, dp_i+|s_i-s_j|)$