njoj 1251 zlly長了一張包子臉

njoj 1251 zlly長了一張包子臉

題意:
zlly長了一張包子臉。他特別喜歡吃糖果。現在他手頭有若干種糖果,每種糖果有個口味值,每種糖果有無數多個。而後婁童鞋也很喜歡吃糖果。他的口味特別普遍,他喜歡各類各樣的口味值,他要求zlly用現有的口味值拼出新的口味值。現在。婁童鞋想知道他不能吃到的口味值最大是多少?你能幫他的忙嗎?
舉個樣例,現在zlly手頭有3,6,10三種糖果,他拼不出口味值爲一、二、四、五、7…17的糖果,因此結果就是17。
另外,糖果種類數<=10。每種糖果的口味值<=265,可以保證最大的結果不超過2,000,000,000。假設都可以拼出或最大值不存在。輸出0。

思路:
事實上2*1e9是虛的。
gcd(a1,...,an)!=1時,無解,
gcd(a1,...,an)==1時,有解。解的上界爲max(ai*aj)。不會證,
因此暴力就能夠。



/*njoj 1251 zlly長了一張包子臉
  題意:
  zlly長了一張包子臉。他特別喜歡吃糖果,現在他手頭有若干種糖果,每種糖果有個口味值。每種糖果有無數多個。而後婁童鞋也很喜歡吃糖果,他的口味特別普遍。他喜歡各類各樣的口味值,他要求zlly用現有的口味值拼出新的口味值。現在,婁童鞋想知道他不能吃到的口味值最大是多少?你能幫他的忙嗎?
  舉個樣例。現在zlly手頭有3,6,10三種糖果,他拼不出口味值爲一、二、四、五、7…17的糖果。因此結果就是17。
  另外。糖果種類數<=10,每種糖果的口味值<=265,可以保證最大的結果不超過2,000,000,000。假設都可以拼出或最大值不存在。輸出0。
  思路:
  事實上2*1e9是虛的。
  gcd(a1,...,an)!=1時,無解,
  gcd(a1,...,an)==1時,有解,解的上界爲max(ai*aj),不會證,
  因此暴力就能夠。
 */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=15;
const int MAX_N=1000005;
int a[N];
bool arr[MAX_N];
void gao(int n){
	memset(arr,0,sizeof(arr));
	int gcd=a[0];
	for(int i=1;i<n;++i){
		gcd=__gcd(gcd,a[i]);
	}
	if(gcd!=1){
		puts("0");
		return ;
	}
	int _min=300;
	for(int i=0;i<n;++i)
		_min=min(a[i],_min);
	int cnt=0;
	int ans;
	arr[0]=1;
	for(int i=1;i<MAX_N;++i){
		for(int j=0;j<n;++j){
			if(a[j]>i) continue;
			if(arr[i-a[j]]){
				arr[i]=1;
				break;
			}
		}
		if(arr[i]) ++cnt;
		else cnt=0;
		if(cnt==_min){
			ans=i-_min;
			break;
		}
	}
	printf("%d\n",ans);
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;++i){
			scanf("%d",&a[i]);
		}
		gao(n);
	}
	return 0;
}
相關文章
相關標籤/搜索