Submission #5898037


Source Code Expand

#include<bits/stdc++.h>
using namespace std;

static const int MAX = 1000;

int main(){
    int A, B;
    cin >> A >> B;
    vector<int> left(A), right(B);

    for(int i= 0 ; i < A; i++){
        cin >> left[i];
    }
    for(int i = 0; i < B; i++){
        cin >> right[i];
    }
    int pointa = A, pointb = B;

    bool s = (A + B) % 2;
    int sumu = 0, sume = 0;

    int dp[MAX+1][MAX+1];//状態量を意識する(ここでは右・左の残りの数に最善手を行ったときの価値を載せていく)
    //dp[i][j] := 左の山にi個、右の山にj個残ってる時に先手が終了までに手に入れることのできる価値
    //先手 = すぬけ
    dp[0][0] = 0;
    /*
    int cnt = 1;
    while(cnt <= A + B){
        if(s == 0){
            for(int i = 0; i <= cnt; i++){
                if(cnt - i <= ) dp[i][cnt-i] = min(dp[i-1][cnt-i], dp[i][cnt-i-1]);

            }
        }else{
            dp[pointa][pointb-1] = dp[pointa][pointb];
        }
        s = !s;
        cnt++;
    }
    */
    for(int i = 1; i <= B; i++){
        if( i % 2 == (A + B) % 2 ){
            dp[0][i] = dp[0][i-1] + right[B - i];
        }else{
            dp[0][i] = dp[0][i-1];
        }
    }
    for(int i = 1; i <= A; i++){
        if( i%2 == (A+B)%2 ){
            dp[i][0] = dp[i-1][0] + left[A-i];
        }else{
            dp[i][0] = dp[i-1][0];
        }
    }

    for(int i = 1; i <= A; i++){
        for(int j = 1; j <= B; j++){
            if((i + j) % 2 == (A + B) % 2){
                dp[i][j] = max(dp[i-1][j] + left[A-i], dp[i][j-1] + right[B-j]);
            }else{
                dp[i][j] = min(dp[i-1][j], dp[i][j-1]);
            }
        }
    }
/*
    for(int i = 0; i <= A; i++){
        for(int j = 0; j <= B; j++){
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }
*/
    cout << dp[A][B] << endl;

    return 0;
}

Submission Info

Submission Time
Task B - ゲーム
User raoZ
Language C++14 (GCC 5.4.1)
Score 3
Code Size 1966 Byte
Status AC
Exec Time 6 ms
Memory 4224 KB

Judge Result

Set Name All
Score / Max Score 3 / 3
Status
AC × 5
Set Name Test Cases
All 00, 01, 02, 90, 91
Case Name Status Exec Time Memory
00 AC 1 ms 256 KB
01 AC 5 ms 3840 KB
02 AC 6 ms 4224 KB
90 AC 1 ms 256 KB
91 AC 1 ms 256 KB