1. //从前往后,从里到外
    2. void getWinNum(vector<int> &arr){
    3. if (arr.empty())return;
    4. int len = arr.size();
    5. vector<vector<int>> first(len, vector<int>(len, 0));
    6. vector<vector<int>> second(len, vector<int>(len, 0));
    7. for (int j = 0; j < len; ++j){
    8. first[j][j] = arr[j];
    9. for (int i = j - 1; i >= 0; --i){
    10. first[i][j] = max(arr[i] + second[i + 1][j], arr[j] + second[i][j - 1]);
    11. second[i][j] = min(first[i + 1][j], first[i][j - 1]);
    12. }
    13. }
    14. cout << first[0][len - 1] << endl;
    15. cout << second[0][len - 1] << endl;
    16. }
    17. //从后往前,从里到外
    18. void getWinNum(vector<int> &arr){
    19. if (arr.empty())return;
    20. int len = arr.size();
    21. vector<vector<int>> first(len, vector<int>(len, 0));
    22. vector<vector<int>> second(len, vector<int>(len, 0));
    23. for (int i = 0; i < len; ++i)
    24. first[i][i] = arr[i];
    25. for (int i = len - 1; i >= 0; --i){
    26. for (int j = i + 1; j < len; ++j){
    27. first[i][j] = max(arr[i] + second[i + 1][j], arr[j] + second[i][j - 1]);
    28. second[i][j] = min(first[i + 1][j], first[i][j - 1]);
    29. }
    30. }
    31. cout << first[0][len - 1] << endl;
    32. cout << second[0][len - 1] << endl;
    33. }