全部评论
试着写了一下答案: //暴力递归
//0~k一共k+1个老师,初始序号0,当前序号curIndex,传n次
int ballTransport(int k, int curIndex, int n)
{
if (n < 1)return 0;
if (n == 1)
{
if (curIndex == 0)return 0;
else return 1;
}
int res = 0;
for (int i = 0; i <= k - 1; i++)
{
int nextIndex = i;
if (curIndex <= nextIndex)nextIndex++;
res += ballTransport(k, nextIndex, n - 1);
}
return res;
}
//dp
int ballTransport_dp(int k, int curIndex, int n)
{
vector<vector<int>> dp(k + 1);
int tmpSum = 0;
for (int i = 0; i < k + 1; i++)
{
dp[i].resize(n);
dp[i][0] = i == 0 ? 0 : 1;
}
tmpSum = k;
for (int j = 1; j < n; j++)
{
for (int i = 0; i < k + 1; i++)
{
if (i == 0)
{
dp[0][j] = tmpSum;
tmpSum = 0;
continue;
}
dp[i][j] = dp[i - 1][j] - dp[i][j - 1] + dp[i - 1][j - 1];
tmpSum += dp[i][j];
}
}
return dp[0][n - 1];
}
int main()
{
int k = 3, n = 3;
cout << ballTransport_dp(k - 1, 0, n);
}
坐等答案
k个猿辅导老师,传一个球,传n次,球从A老师手里开始传,又传回A老师手里的传球方式有多少种?(每次可以传给除自己外的任何一个人)比如输入k=3,n=3,那么输出为2。只有二种传球方式:abca,acba
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享