【題解】LuoGu5020:貨幣系統

原題傳送門
水博客~~
若是系統中的某一個數可以被系統中的其他數表示,這個數就是無關緊要的
所有不能被其他數表示的數的個數就是答案
DP\text{DP}解決即可

Code:

#include <bits/stdc++.h>
#define maxn 25010
using namespace std;
int dp[maxn], n, a[maxn];

inline int read(){
	int s = 0, w = 1;
	char c = getchar();
	for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
	for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
	return s * w;
}

int main(){
	int T = read();
	dp[0] = 1;
	while (T--){
		n = read();
		int Max = 0, ans = 0;
		for (int i = 1; i <= n; ++i) Max = max(Max, a[i] = read());
		for (int i = 1; i <= Max; ++i) dp[i] = 0;
		sort(a + 1, a + 1 + n);
		for (int i = 1; i <= n; ++i){
			if (!dp[a[i]]) ++ans;
			for (int j = a[i]; j <= Max; ++j) dp[j] |= dp[j - a[i]];
		}
		printf("%d\n", ans);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章