@[萌面人](/space/show?uid=124700) ```k```的那一层是没有必要的
感觉你的背包写复杂了,其实只要这样就好了
```cpp
#include <cstdio>
#include <algorithm>
const int maxn = 107, maxa = 25207;
int a[maxn], n, T;
bool f[maxa];
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d", a + i);
std::sort(a + 1, a + n + 1);
int ans = n;
for (int i = 1; i <= n; ++i) {
if (f[a[i]]) --ans;
f[a[i]] = 1;
for (int j = a[1]; j <= a[n]; ++j)
if (j >= a[i]) f[j] |= f[j - a[i]];
}
printf("%d\n", ans);
for (int i = 1; i <= a[n]; ++i) f[i] = 0;
}
return 0;
}
```
by GKxx @ 2019-01-29 11:51:09
@[GKxx](/space/show?uid=72071)
感谢大佬Orz
by Frost_Delay @ 2019-01-29 15:02:07