解法:总和为奇数必为false,如果数字的某种组合能够等于 所有数字的总和/2。
#include <bits/stdc++.h> using namespace std; bitset<50005> flag; ///bitset 在 bitset 头文件中, ///是一种类似数组的结构, ///每一个元素只能是0或1,每个元素仅用1bit空间。 int val; int nums[101]; int len; int sum = 0; int main() { while (~scanf("%d%c", &val, &s)) { sum += val; nums[len++] = val; if (s != ',') break; }; if (sum & 1)///奇数必为false { printf("false"); return 0; } flag[0] = 1; for (int i = 0; i < len; ++i) flag |= (flag << nums[i]);///难点 if (flag[sum / 2]) printf("true"); else printf("false"); return 0; }