人空空人空空人空空人空空人空空人空空人空空人空空人
第一个人坐在第 2 位能坐的人数 : 8
空人空人空空人空空人空空人空空人空空人空空人空空人
第一个人坐在第 3 位能坐的人数 : 9
人空人空人空空人空空人空空人空人空空人空空人空空人
第一个人坐在第 4 位能坐的人数 : 9
人空空人空人空空人空人空空人空人空空人空空人空空人
第一个人坐在第 5 位能坐的人数 : 10
人空人空人空人空空人空人空空人空人空空人空人空空人
第一个人坐在第 6 位能坐的人数 : 10
人空人空空人空人空人空人空空人空人空空人空人空空人
第一个人坐在第 7 位能坐的人数 : 10
人空空人空空人空人空人空人空空人空人空人空人空空人
第一个人坐在第 8 位能坐的人数 : 11
人空空人空人空人空人空人空人空人空人空人空人空空人
第一个人坐在第 9 位能坐的人数 : 12
人空人空人空人空人空人空人空人空人空人空人空人空人
第一个人坐在第 10 位能坐的人数 : 11
人空人空人空人空空人空空人空人空人空人空人空人空人
第一个人坐在第 11 位能坐的人数 : 10
人空人空空人空人空空人空空人空人空人空空人空人空人
第一个人坐在第 12 位能坐的人数 : 9
人空人空空人空空人空空人空空人空空人空空人空人空人
第一个人坐在第 13 位能坐的人数 : 8
人空空人空空人空空人空空人空空人空空人空空人空空人
第一个人坐在第 14 位能坐的人数 : 9
人空空人空空人空空人空人空人空人空空人空空人空空人
第一个人坐在第 15 位能坐的人数 : 10
人空空人空人空人空空人空人空人空人空空人空人空空人
第一个人坐在第 16 位能坐的人数 : 11
人空空人空人空人空人空人空人空人空人空人空人空空人
第一个人坐在第 17 位能坐的人数 : 12
人空人空人空人空人空人空人空人空人空人空人空人空人
第一个人坐在第 18 位能坐的人数 : 11
人空人空人空人空人空人空人空人空空人空空人空人空人
第一个人坐在第 19 位能坐的人数 : 10
人空人空人空人空空人空人空人空人空空人空空人空空人
第一个人坐在第 20 位能坐的人数 : 10
人空人空人空人空空人空人空空人空人空空人空人空空人
第一个人坐在第 21 位能坐的人数 : 10
人空人空空人空人空空人空人空空人空人空空人空人空人
第一个人坐在第 22 位能坐的人数 : 9
人空人空空人空人空空人空人空空人空空人空空人空空人
第一个人坐在第 23 位能坐的人数 : 9
人空人空空人空空人空空人空人空空人空空人空空人空人
第一个人坐在第 24 位能坐的人数 : 8
人空人空空人空空人空空人空空人空空人空空人空空人空
第一个人坐在第 25 位能坐的人数 : 8
人空空人空空人空空人空空人空空人空空人空空人空空人
#include <iostream>using namespace std;
int main(void) {
int a[26], an[26];
int INF = 1000000;
for (int i = 1; i <= 25; i++) {
memset(a, 0, sizeof(a));
a[i] = 1;
int temp = 0;
while (true) {
int p, ans = 0;
for (int i = 1; i <= 25; i++) {
if (!a[i]) {
int s = 0, e = 0;
for (int j = i - 1;; j--) {
if (j == 0) {
s = INF;
break;
}
if (a[j]) break;
s++;
}
for (int j = i + 1; ; j++) {
if (j == 26) {
e = INF;
break;
}
if (a[j]) break;
e++;
}
if (min(s, e) > ans) ans = min(s, e), p = i;
}
}
if (!ans) break;
a[p] = 1;
// cout << p << endl;
temp++;
}
an[i] = temp;
cout << "第一个人坐在第" << i << "位" << "能坐的人数: " << temp << endl;
if (i) {
for (int i = 1; i <26; i++) {
cout << (a[i] ? "人" : "空") ;
}
cout << endl;
}
}
}
因为25是奇数,所以仅考虑奇数情况,设座位数为N 情况分两种: 1.N/4 余1. 直接安排在左边第一个位置或右边第一个即可, 随后进来的人会坐在坐位区间的中点处,以此类推。 本题就是这种情况,最多13位顾客。 2.N/4 余3. 如像情况一那样安排,则在占据首尾,中间的位置后, 剩余坐位是偶数,无法达到最优解,例如N=7: 人空空人空空人 故不能简单安排在首尾的位置上,正确方法是在中间找个位置, 可能性有很多种, 遵循的原则是分割后两个有人坐位中间剩余位置是奇数, 这样又回到二分的那种情况愉快的进行下去达到最优解: 人空人空人空人空。。。人空人空人