31 July

P1013 hex digits

Precision could not be more pit ......

#include <cstdio>
#include <cstring>

struct INT {
    long long h, l;
};
long long t=1e18;
INT max(INT x, INT y) {
    if (x.h>y.h) return x; if (x.h<y.h) return y;
    if (x.l>y.l) return x; return y;
}
INT operator + (INT x, INT y) {
    INT res; res.l=x.l+y.l;
    res.h=x.h+y.h+res.l/t; res.l%=t;
    return res;
}
INT operator * (INT x, int y) {
    INT res; res.l=x.l*y;
    res.h=x.h*y + res.l/t; res.l%=t;
    return res;
}

int n, m;
long long G[83]; INT ans, f[83][83];

int main() {
    scanf("%d%d", &n, &m);
    while (n--) {
        for (int i=1; i<=m; ++i) scanf("%lld", &G[i]);
        memset(f, 0, sizeof(f));
        for (int j=0; j<m; ++j) for (int i=1; i+j<=m; ++i)
            f[i][i+j]=max(f[i+1][i+j] + (INT){0,G[i]}, f[i][i+j-1] + (INT){0,G[i+j]})*2;
        ans=ans+f[1][m];
    }
    if (ans.h) printf("%lld%018lld\n", ans.h, ans.l);
    else printf("%lld\n", ans.l);
    return 0;
}

Guess you like

Origin www.cnblogs.com/greyqz/p/11278220.html