WA求调
查看原帖
WA求调
1068513
ZHUSITAOcccccc楼主2025/7/29 20:39

不知道为什么,我算出来的第一个数是对的,第二个数总是 1-1,不知道为什么。
代码:

#include <bits/stdc++.h>
using namespace std;
int n, t[1005][1005], dp[1005][1005], c[1005][1005], m[1005], ans, tot = LLONG_MAX;
void work(int i, int j, int i1, int j1, int i2, int j2, int line, int ex) {
    dp[i][j] += (dp[i1][j1] > dp[i2][j2] || dp[i1][j1] == dp[i2][j2] && c[i1][j1] < c[i2][j2]) ? dp[i1][j1] + m[line] : dp[i2][j2] + m[line];
    c[i][j] += ((dp[i1][j1] > dp[i2][j2] || dp[i1][j1] == dp[i2][j2] && c[i1][j1] < c[i2][j2]) ? c[i1][j1] : c[i2][j2]) + ((t[i][j] != m[line]) ? 1 : 0);
    ans = max(dp[i][j], ans);
    tot = min(tot, c[i][j] + ex);
}
void solve(int a) {
    memset(dp, 0, sizeof dp);
    memset(m, 0, sizeof m);
    memset(c, 0, sizeof c);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++) {
            if (!a)
                m[i] = max(m[i], t[i][j]);
            if (a == 120)
                m[i - j] = max(m[i - j], t[i][j]);
            if (a == 240)
                m[j] = max(m[j], t[i][j]);
        }
    if (!a) 
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= i; j++)
                work(i, j, i - 1, j - 1, i - 1, j, i, 0);
    if (a == 120)
        for (int i = n; i; i--)
            for (int j = 1; j <= i; j++)
                work(i, j, i, j - 1, i + 1, j, i - j, n);
    if (a == 240)
        for (int j = n; j; j--)
            for (int i = n; i >= j; i--)
                work(i, j, i, j + 1, i + 1, j + 1, j, 2 * n);
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++)
            cin >> t[i][j];
    solve(0);
    solve(120);
    solve(240);
    cout << ans << ' ' << tot;
	return 0;
}
2025/7/29 20:39
加载中...