注意:此题题解写的较为简略。
P5020 [NOIP2018 提高组] 货币系统
转化为完全背包即可。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 25010, M = 110;
int n;
int f[N];
int a[M];
void solve() {
int maxx = 0;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i], maxx = max(maxx, a[i]);
memset(f, 0, sizeof(f));
f[0] = 1;
int ans = 0;
for (int i = 1; i <= n; i++) {
int x = a[i];
for (int j = x; j <= maxx; j++) {
f[j] += f[j - x];
}
}
for (int i = 1; i <= n; i++) if (f[a[i]] > 1) ans++;
cout << n - ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) solve();
return 0;
}
祝大家在WC-2023上玩的愉快。
标签:maxx,int,题解,NOIP2018,P5020,include From: https://www.cnblogs.com/PlayWithCPP/p/17058794.html