可以对以上代码作注释嘛
时间: 2024-02-20 13:00:22 浏览: 21
当然可以,以下是对代码的注释:
```c++
// Demo01.cpp : Defines the entry point for the console application. //
#include <stdio.h>
#include <string.h>
#define MAX_N 10 // 定义集装箱最大数量
int weight[MAX_N], max[MAX_N], c1, c2, n, w[MAX_N]; // weight 表示已经装到第一艘船上的重量,max 为每个船目前的最大载物值,c1 和 c2 分别为两条船的最大载重量,n 为集装箱的数量,w[n] 为每个集装箱的重量。
bool chosen[MAX_N]; // 用于记录每个集装箱被装在了哪条船上。
void search(int m) {
if (m == n) { // 如果所有集装箱都已经被装载
int sum = 0;
for (int i = 0; i < n; i++) {
if (chosen[i]) { // 如果集装箱被装载到第一艘船上
sum += w[i]; // 将集装箱的重量加到 sum 中
}
}
if (sum <= c1) { // 如果第一艘船承重不超过 c1
for (int i = 0; i < n; i++) {
if (chosen[i]) { // 集装箱被装载到第一艘船上
printf("%d ", 1);
} else {
printf("%d ", 2);
}
}
printf("\n"); // 输出每个集装箱被装载到哪条船上
if (sum > max[0]) {
max[0] = sum; // 更新第一艘船目前的最大载物值
}
} else if (sum <= c1 + c2) { // 如果第一艘船的承重超过了 c1,但不超过 c1+c2
if (sum > max[1]) {
max[1] = sum; // 更新第二艘船目前的最大载物值
}
}
return;
}
chosen[m] = true; // 选择第 m 个集装箱被装载到第一艘船上
search(m + 1);
chosen[m] = false; // 不选择第 m 个集装箱被装载到第一艘船上
search(m + 1);
}
int main() {
while (scanf("%d%d%d", &c1, &c2, &n) == 3 && n > 0) { // 输入 c1、c2 和 n
memset(max, 0, sizeof(max)); // 将 max 数组清零
for (int i = 0; i < n; i++) {
scanf("%d", &w[i]); // 输入每个集装箱的重量
}
search(0); // 开始搜索
if (max[1] > 0) {
printf("YES\n"); // 如果第二艘船装载了集装箱,输出 YES
} else {
printf("NO\n"); // 否则输出 NO
}
printf("%d\n", max[0]); // 输出第一艘船目前的最大载物值
}
return 0;
}
```