包子凑数
作者:
đł_0
,
2024-04-08 21:17:16
,
所有人可见
,
阅读 9
#include<bits/stdc++.h>
using namespace std;
int a[105],n,dp[1000001],ans=0,sign=0;//容量确定情况下的最大价值
int gcd(int x,int y){
if(x<y){
int m=x;
x=y;
y=m;
}
return y==0?x:gcd(y,x%y);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int x=a[1];
for(int i=2;i<=n;i++){
x=gcd(x,a[i]);//裴蜀定理,若所有数的最大公约数大于1,则会有无穷多个取不到
if(x==1){
sign=1;
break;
}
}
if(sign==0){
printf("INF");
return 0;
}
for(int j=1;j<=100000;j++){
for(int i=1;i<=n;i++){
if(a[i]>j)
continue;
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
}
if(dp[j]!=j) ans++;
}
printf("%d",ans);
return 0;
}