P5020 [NOIP2018 提高组] 货币系统 题解
生活随笔
收集整理的這篇文章主要介紹了
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;
}
總結
以上是生活随笔為你收集整理的P5020 [NOIP2018 提高组] 货币系统 题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: n&(n-1)位运算的妙用
- 下一篇: [cogs2638]数列操作ψ(双标记线