就是一个Fibonacci数列的问题。
1. 剩余环数大于枪数乘以10, 有0种打法。
2. 剩下一枪,只有一种打法。
3. f(n) = f(n-0) + f(n-1) + ........f(n-10)
递归过程中采用记忆化搜索。
using namespace std;
int matrix[91][11];
int total = 0;
int f(int a, int b)
{
if (matrix[a][b] != -1)
{
return matrix[a][b];
}
if (b * 10 < a)
{
return matrix[a][b] = 0;
}
if (b == 1)
{
return matrix[a][b] = 1;
}
int i, ret = 0;
for (i = 0; i <= 10; i++)
{
ret += f(a-i, b-1);
}
return matrix[a][b] = ret;
}
int main()
{
int i, j;
for (i = 0; i < 91; i++)
{
for (j = 0; j < 11; j++)
{
matrix[i][j] = -1;
}
}
cout << f(90, 10) << endl;
return 0;
}