题意:求一个序列中的最大 m 段和,m 段不能交叉. dp[i][0/1][j] 表示已经取完第 i 个物品,第 i 个物品取或不取,取到第 j 个子段. 用vis[i][0/1][j] 表示该 dp 值是否存在. 然后当 vis[i][0][j] 存在,即第 i 个物品不取,之前已经取了 j 个子段,可推得: 第 i+1 个不取: dp[i+1][0][j]=max(dp[i+1][0][j],dp[i][0][j]); 第 i+1 个取: dp[i+1][1][j+1]=max(dp[i+1…