题意:
n个甜甜圈,两个人,每次没人最多拿m个。谁先拿完谁吃掉所有当前拿的,另一个人把手上的放回,再来第二轮...
思路:
为什么不能博弈:
博弈思路:
//0~m 直接吃
//让对手是m+1,对手不管选什么,都是我们吃
//m+2~2m+1 都可以让cur为m+1,在这个范围内的可以赢
//2m+2 败
//2m+3~3m+2 胜
//3m+3 败
//
//km+k必败 -> 必败了,那我就尽可能多拿,让你少拿
// cur
// km+k
// (k-1)m+k
// (k-1)m+k-1
// (k-2)m+k-1
//
// m+1
// 1
//
// **k**
//下一轮 km
// m == 1
// 5
// 2+2
// 2+1
// 1+1
// 1
// 3
//
// 2
// 1+1
// 1
// 1
// 1
void solve()
{
cin >> n >> m;
int cur = n;
int ans = 0;
int k = 0;
while (1)
{
while (1)
{
k = cur / m;
if (cur == k * m + k)
{
cur = k * m;
}
else
{
while (cur - k * m < k)
{
k--;
}
if (cur == k * m + k)
{
cur = k * m;
continue;
}
else if (cur - k * m > k)
{
ans += cur - (k * m + k);
}
if (k <= 0)break;
ans += k;
cur = k * m;
}
break;///
}
if (k <= 0)break;
while (1)
{
k = cur / m;
if (cur == k * m + k)
{
cur = k * m;
}
else
{
while (cur - k * m < k)
{
k--;
}
if (cur == k * m + k)
{
cur = k * m;
ans += k;
continue;
}
else if (cur - k * m > k)
{
}
if (k <= 0)break;
cur = k * m;
}
break;
}
if (k <= 0)break;
}
cout << ans << endl;
}
其实尽可能贪心了,但是无法预估下一轮是否我们是必败,要必败就亏了呀。而要处理这个,就没有普遍做法了。所以放弃吧~~
————
(待完成)