前言
这个没啥铺垫知识吧……
(不过嘛……这里切棋盘有点吓人……)
分析
这个棋盘怎么切分呢?见下图⬇️ 多举几个例子(下表),就能发现,在横竖尽量相等时候切得块数最多。
n | 横 | 竖 | 结果 |
---|---|---|---|
1 | 1 | 0 | 2 |
2 | 1 | 1 | 4 |
3 | 2 | 1 | 6 |
4 | 2 | 2 | 9 |
那么如何求解呢?
先假设 $n$ 为偶数,已经分析过,横竖相等且为 $ (\dfrac{n}{2}) $ 时是最优解,每边被分成了 $ (\dfrac{n}{2} + 1) $ 段,其平方即为答案。
再来,若 $n$ 为奇数,那么易得 $ (\left\lfloor\dfrac{n}{2}\right\rfloor + 1) × (\left\lfloor\dfrac{n}{2}\right\rfloor + 2) $ 时是最优解。
实现
如此简单好的一道题就做完了,代码如下:
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
cin >> n;
if (n % 2 == 0) {
cout << (n / 2 + 1) * (n / 2 + 1);
} else {
cout << (n / 2 + 1) * (n / 2 + 2);
}
return 0;
}