Submission #1606901


Source Code Expand

#include <iostream>
using namespace std;

int b[2][3];
int c[3][2];
int dp[20000];

struct State{
    int a[3][3];
    int num;
};

int encode(int a[3][3]){
    int enc = 0;
    int fac = 1;
    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            enc += a[i][j] * fac;
            fac *= 3;
        }
    }
    return enc;
}

int calc(int a[3][3]){
    int ret = 0;
    for(int i=0; i<2; i++)
        for(int j=0; j<3; j++)
            if(a[i][j] == a[i+1][j])
                ret += b[i][j];
    for(int i=0; i<3; i++)
        for(int j=0; j<2; j++)
            if(a[i][j] == a[i][j+1])
                ret += c[i][j];
    return ret;
}

int dfs(State &state){
    int enc = encode(state.a);
    if(dp[enc] != -1) return dp[enc];
    if(state.num == 9){
        dp[enc] = calc(state.a);
        return dp[enc];
    }
    bool tak = !(state.num % 2);
    int optscore = tak ? -(1<<20) : 1<<20;
    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            if(state.a[i][j] == 0){
                state.a[i][j] = (state.num % 2) + 1;
                state.num++;
                int score = dfs(state);
                if(tak)
                    optscore = max(optscore, score);
                else
                    optscore = min(optscore, score);
                state.num--;
                state.a[i][j] = 0;
            }
        }
    }
    dp[enc] = optscore;
    return dp[enc];
}

int main(){
    for(int i=0; i<2; i++)
        for(int j=0; j<3; j++)
            cin >> b[i][j];
    for(int i=0; i<3; i++)
        for(int j=0; j<2; j++)
            cin >> c[i][j];

    fill_n(dp, 20000, -1);

    State state;
    for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
            state.a[i][j] = 0;
    state.num = 0;
    dfs(state);

    int sm = 0;
    for(int i=0; i<2; i++)
        for(int j=0; j<3; j++)
            sm += b[i][j] + c[j][i];
    cout << dp[0] << endl;
    cout << sm - dp[0] << endl;
    return 0;
}

Submission Info

Submission Time
Task C - 双子と○×ゲーム
User suzume
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2049 Byte
Status AC
Exec Time 2 ms
Memory 384 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 24
Set Name Test Cases
Sample sample-01.txt, sample-02.txt
All sample-01.txt, sample-02.txt, test-01.txt, test-02.txt, test-03.txt, test-04.txt, test-05.txt, test-06.txt, test-07.txt, test-08.txt, test-09.txt, test-10.txt, test-11.txt, test-12.txt, test-13.txt, test-14.txt, test-15.txt, test-16.txt, test-17.txt, test-18.txt, test-19.txt, test-20.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
sample-01.txt AC 2 ms 384 KB
sample-02.txt AC 1 ms 384 KB
test-01.txt AC 1 ms 384 KB
test-02.txt AC 1 ms 384 KB
test-03.txt AC 1 ms 256 KB
test-04.txt AC 2 ms 256 KB
test-05.txt AC 1 ms 384 KB
test-06.txt AC 2 ms 256 KB
test-07.txt AC 1 ms 256 KB
test-08.txt AC 1 ms 384 KB
test-09.txt AC 1 ms 384 KB
test-10.txt AC 2 ms 256 KB
test-11.txt AC 1 ms 256 KB
test-12.txt AC 1 ms 384 KB
test-13.txt AC 1 ms 384 KB
test-14.txt AC 1 ms 384 KB
test-15.txt AC 1 ms 256 KB
test-16.txt AC 2 ms 256 KB
test-17.txt AC 1 ms 256 KB
test-18.txt AC 2 ms 256 KB
test-19.txt AC 2 ms 384 KB
test-20.txt AC 1 ms 256 KB