问题标题: 酷町堂:2370 搭积木(block)

0
0
已解决
周琪岳
周琪岳
资深光能
资深光能

点我看题

#include <iostream>
#include <cstring>

using namespace std;

int n, ans, f[105][4];
struct node {
    int x, y, z;
};
node a[105];

int dfs(int pos, int data) {
    if(f[pos][data] != -1) return f[pos][data];
    if(pos < 1 || pos > n) return 0;
    node tmp = a[pos];
    int area = 0;
    if(data == 1) area = tmp.x*tmp.y;
    if(data == 2) area = tmp.x*tmp.z;
    if(data == 3) area = tmp.y*tmp.z;
        // cout << pos << " " << data << endl;
    int rest = 0;
    for(int i=1; i<=n; i++) {
        int a1 = a[i].x*a[i].y, a2 = a[i].x*a[i].z, a3 = a[i].z*a[i].y;
        if(a1 > area)
            rest = max(rest, dfs(i, 1));
        if(a2 > area)
            rest = max(rest, dfs(i, 2));
        if(a3 > area)
            rest = max(rest, dfs(i, 3));
    }
    if(data == 1) rest += tmp.z;
    if(data == 2) rest += tmp.y;
    if(data == 3) rest += tmp.x;
    ans = max(ans, rest);
    return f[pos][data] = rest;
}

int main() {
    memset(f, -1, sizeof(f));
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> a[i].x >> a[i].y >> a[i].z;
    }
    // prepare();
    dfs(n, 1);
    dfs(n, 2);
    dfs(n, 3);
    cout << ans;
    return 0;
}

挂的真惨,qp求助


0
已采纳
谭迪元
谭迪元
资深光能
资深光能

我也是零分......

0
我要回答