题解 P6337 【[COCI2007-2008#2] CRNE】

题在这里!


前言

这个没啥铺垫知识吧……

(不过嘛……这里切棋盘有点吓人……)


分析

这个棋盘怎么切分呢?见下图⬇️ 多举几个例子(下表),就能发现,在横竖尽量相等时候切得块数最多。

n结果
1102
2114
3216
4229

那么如何求解呢?

先假设 $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;
}

完结撒花~