
动态规划题目,参照原来题目
// Study.cpp: 定义控制台应用程序的入口点。
//
#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
char x;
int step;
bool canWin(vector<vector<vector<int>>> &m,int a,int b,int c)
{
int sum = a + b + c;
if (sum == 1)
{
m[a][b][c] = 0;
return false;
}
else if (sum == a || sum == b || sum == c || sum == 2)
return true;
for (int i = 1; i <= a; i++)
if (m[a-i][b][c] == 0 || (m[a-i][b][c] == -1 && !canWin(m,a - i, b, c)) )
{
x = 'A';
step = i;
m[a][b][c] = 1;
return true;
}
for (int i = 1; i <= b; i++)
if (m[a][b-i][c] == 0 || (m[a][b-i][c] == -1 && !canWin(m,a, b-i, c)) )
{
x = 'B';
step = i;
m[a][b][c] = 1;
return true;
}
for (int i = 1; i <= c; i++)
if (m[a][b][c-i] == 0 || (m[a][b][c-i] == -1 && !canWin(m,a , b, c-i)) )
{
x = 'C';
step = i;
m[a][b][c] = 1;
return true;
}
m[a][b][c] = 0;
return false;
}
int main()
{
int a, b, c;
cin >> a >> x >> b >> x >> c;
vector<vector<vector<int>>> m(a+1, vector<vector<int>>(b+1, vector<int>(c+1, -1)));
//cout << canWin(a, b, c) << endl;
if (canWin(m,a, b, c))
{
cout << x << "," << step << endl;
}
else
cout << 1 << endl;
system("pause");
return 0;
}