WA 75分求助
查看原帖
WA 75分求助
766154
God_Demon楼主2024/3/27 20:01

离了个大谱

onlyonly WrongAnswerWrongAnswer onon #4 Subtask #1

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 3e3 + 5;

int n, m, dp[maxn][maxn][2], len = 1, now;
ll ans;

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i) for (int j = 1; j <= i; ++j) scanf("%d", &dp[i][j][0]);
    while ((len << 1) < m) {
        len <<= 1;
        for (int i = 1; i + len - 1 <= n; ++i) for (int j = 1; j <= i; ++j) 
            dp[i][j][now ^ 1] = max({dp[i][j][now], dp[i + (len >> 1)][j][now], dp[i + (len >> 1)][j + (len >> 1)][now], dp[i + (len >> 2)][j][now], dp[i + (len >> 2)][j + (len >> 2)][now], dp[i + (len >> 1)][j + (len >> 2)][now]});
        now ^= 1;
    }
    for (int i = 1; i + m - 1 <= n; ++i) for (int j = 1; j <= i; ++j) 
        ans += max({dp[i][j][now], dp[i + m - len][j][now], dp[i + m - len][j + m - len][now], dp[i + ((m - len) >> 2)][j][now], dp[i + ((m - len) >> 2)][j + ((m - len) >> 2)][now], dp[i + m - len][j + ((m - len) >> 2)][now]});
    printf("%lld", ans);
    return 0;
}
2024/3/27 20:01
加载中...