删除数字

来源:互联网 发布:Json 大括号 编辑:程序博客网 时间:2024/06/07 02:22

这题也有很明显的线性关系,要求一串数字单调不递减
我们只需知道前面的那个数是否比自己大就好

在预处理每个数的组成方案后,后面的就是线性dp了
枚举前一个数的方案,与后面一个数的方案
由于前面一个数的组成方案已经求出来了,可以使用前缀和+二分把这一维优化成logn
最后复杂度为n2logn


FOR(i,1,m) {        FOR(j,1,Way[i]) {            int now=upper_bound(Sum[i-1]+1,Sum[i-1]+Way[i-1]+1,Sum[i][j])-Sum[i-1]-1;            dp[i][j]=dp[i-1][now];        }        FOR(j,1,Way[i]) {            dp[i][j]+=dp[i][j-1];            if(dp[i][j]>=Mod)dp[i][j]-=Mod;        }    }