RE
2025-01-04 18:15:36
发布于:广东
7阅读
0回复
0点赞
def can_k_win(n, k, stones):
# 动态规划表,dp[i][j][c]表示在区间[i, j]内,当前玩家已经拿了c个青色石头时,当前玩家是否有必胜策略
dp = [[[False] * (k + 1) for _ in range(n)] for _ in range(2)]
for i in range(n):
for c in range(k + 1):
if stones[i] == 'C':
if c + 1 >= k:
dp[0][i][c] = False
else:
dp[0][i][c] = True
else:
dp[0][i][c] = True
for length in range(2, n + 1):
for i in range(0, n - length + 1):
j = i+length - 1
for c in range(k + 1):
dp[1][i][c]=False
# 取左端石头
new_c = c+(1 if stones[i] == 'C' else 0)
if new_c < k:
dp[1][i][c]=dp[1][i][c] or not dp[0][i + 1][new_c]
# 取右端石头
new_c = c+(1 if stones[j] == 'C' else 0)
if new_c < k:
dp[1][i][c]=dp[1][i][c] or not dp[0][i][j - 1][new_c]
for c in range(k + 1):
dp[0][i][c]=dp[1][i][c]
return dp[0][0][0]
t = int(input())
for _ in range(t):
n, k = map(int, input().split())
stones = input().strip()
if can_k_win(n, k, stones):
print("YES")
else:
print("NO")
这里空空如也
有帮助,赞一个