社区讨论

40分求调

P8646[蓝桥杯 2017 省 AB] 包子凑数参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mihczvzd
此快照首次捕获于
2025/11/27 19:37
3 个月前
此快照最后确认于
2025/11/28 21:30
3 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5, M = 105;

int n, ans;
int a[N], dp[M];

int gcd(int m, int n) {
	if (n) return gcd(n, m % n);
	return m;
}

bool pd(int *a) {
	int g = a[1];
	for (int i = 2; i <= n; i ++) {
		g = gcd(g, a[i]);
		if (g == 1) {
			return false;
		}
	}
	return g > 1;
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);

	if (pd(a)) {
		printf("INF");
		return 0;
	}

	dp[1] = 1;
	for (int i = 1; i <= n; i ++) 
		for (int j = a[i]; j <= M; j ++) 
			dp[j] = max(dp[j], dp[j - a[i]]);
	
	for (int i = 1; i <= M; i ++) 
		if (!dp[i]) ans ++;
	
	printf("%d\n", ans);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...