##include <stdio.h>#define MAX_N 100#define MAX_V 10000int n, W;int a[MAX_N];int dp[MAX_N+1][MAX_V+1];int main() { scanf("%d", &n); W = 0; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); W += a[i]; } if (W % 2 == 1) { printf("NO\n"); return 0; } W /= 2; for (int i = 0; i <= n; i++) { for (int j = 0; j <= W; j++) { if (j == 0) { dp[i][j] = 1; } else if (i == 0) { dp[i][j] = 0; } else if (j < a[i-1]) { dp[i][j] = dp[i-1][j]; } else { dp[i][j] = dp[i-1][j] || dp[i-1][j-a[i-1]]; } } } if (dp[n][W]) { printf("YES\n"); } else { printf("NO\n"); } return 0;}哪里有错
时间: 2023-06-17 12:08:21 浏览: 146
#include <stdio.h>
你的代码逻辑没有问题,但是在编译时会报错,因为你的代码中有中文字符(NO和YES)。将这些中文字符改成英文字符即可。另外,你没有在代码中包含头文件stdlib.h,需要添加。改过后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
#define MAX_V 10000
int n, W;
int a[MAX_N];
int dp[MAX_N+1][MAX_V+1];
int main() {
scanf("%d", &n);
W = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
W += a[i];
}
if (W % 2 == 1) {
printf("NO\n");
return 0;
}
W /= 2;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= W; j++) {
if (j == 0) {
dp[i][j] = 1;
} else if (i == 0) {
dp[i][j] = 0;
} else if (j < a[i-1]) {
dp[i][j] = dp[i-1][j];
} else {
dp[i][j] = dp[i-1][j] || dp[i-1][j-a[i-1]];
}
}
}
if (dp[n][W]) {
printf("YES\n");
} else {
printf("NO\n");
}
return 0;
}
```
阅读全文