#include <bits/stdc++.h>
using namespace std;
const int maxn=110;
int n,a[maxn];
bool dp[maxn][10005];
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
cin>>n;
int d=0;
for(int i=1;i<=n;i++){
cin>>a[i];
d=gcd(d,a[i]);
}
memset(dp,0,sizeof(dp));
dp[0][0]=true;
if(d!=1) cout<<"INF";
else{
for(int i=1;i<=n;i++){
for(int j=0;j<=10000;j++){
if(j<a[i]) dp[i][j]=dp[i-1][j];
if(j>=a[i])dp[i][j]=dp[i-1][j]||dp[i][j-a[i]];
}//为啥这边是||dp[i][j-a[i]]而不是||dp[i-1][j-a[i]]呀!(难道是因为题目的要求为无限笼包吗?)
}
int ans=0;
for(int j=0;j<=10000;j++){
if(dp[n][j]==0) ans++;
}
cout<<ans;
}
return 0;
}
蓝桥杯——包子凑数(无限笼数)
于 2022-04-02 20:37:37 首次发布