rt.
O(ans×n) 的做法能过,而且效率不错?
#include <bits/stdc++.h>
const int N = 100, M = 2e6 + 10;
int f[M];
int k, n, ans, a[N];
int main() {
memset(f, -1, sizeof(f));
scanf("%d%d", &k, &n), f[0] = 0;
for (int i = 1; i <= n; ++i) scanf("%d", a + i);
for (int i = 1; i < M; ++i) {
for (int j = 1; j <= n; ++j) {
if (i - a[j] < 0) continue;
if (f[i - a[j]] == -1) continue;
if (f[i - a[j]] + 1 > k) continue;
if (f[i] == -1) f[i] = f[i - a[j]] + 1;
else f[i] = std::min(f[i], f[i - a[j]] + 1);
}
if (~f[i]) ++ans;
else break;
}
std::cout << ans << std::endl;
return 0;
}