gqd1

T1

。。简单题,只是考试时想出来了写错了考后10min过了。。

确定出正的和负的的绝对值最大处即可,可以dfs求。

T2

50pts

区间dp,复杂度为\(O(n^3)\)

70pts

考虑dp,f[i][j]表示在前i个数中还有j个左括号未匹配时的最大值,分正负考虑,然后考虑加右括号,左括号,不加时的转移。

100pts

考虑到括号最多嵌套2层,缩小上面做法的第二维就行了。

转移:

for(int i=2;i<=n;i++)
        if(op[i]=='-'){
            for(int j=1;j<=4;j++){
                f[i][j]=max(f[i][j],f[i-1][j-1]+(((j-1)&1)?a[i]:(-a[i])));
            }
            for(int j=0;j<=4;j++){
                f[i][j]=max(f[i][j],f[i-1][j]+((j&1)?a[i]:(-a[i])));
            }
            for(int j=0;j<4;j++){
                f[i][j]=max(f[i][j],f[i-1][j+1]+(((j+1)&1)?a[i]:(-a[i])));
            }
        }
        else {
            for(int j=0;j<=4;j++){
                f[i][j]=max(f[i][j],f[i-1][j]+((j&1)?(-a[i]):a[i]));
            }
            for(int j=0;j<4;j++){
                f[i][j]=max(f[i][j],f[i-1][j+1]+(((j+1)&1)?(-a[i]):a[i]));
            }
        }

T3

45pts

建图跑最短路,复杂度:\(O(w^2)\)

100pts

引理1

必有一条最短路线,仅在矩形的边上转弯。

引理2

必有一条最短的路线,它的x是递增的。

引理可感性理解。

于是可以考虑dp。

状态即为在每个矩形四角时走的最短路程,然后实际上只用考虑每个矩形左边的边就行了。

按横坐标排序,对于一条线段l,r,只有纵坐标在l,r内的点的dp值可以更新线段的断电,所以可以用set维护。

你可能感兴趣的:(gqd1)