所有包子数的公因数不为1,就会出现有无限多个凑不出来的数。
公因数为1则计算出10000以内有几个凑不出来的。
猜测下最大可能出现的数,可用的包子数越少(最少2);包子数越大(99、100),99x+100y得到一个数,那么为了能达到每隔1个数都能凑出,势必要用到100-99=1。
少用一个100,换用99可以让当前凑出的数-1。
很神奇,那么从一个100开始,99
两个100,198
三个297。。。
什么时候凑出来xxx01呢,当然是9901。
据此推测可能的最大数是9802,最后一个凑不出来的就是9801。
推理完毕!
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define DPMAX 9802
int gcd(int m,int n)
{
return m%n?gcd(n,m%n):n;
}
int main(int argc,char **argv)
{
int cnt,sp[105]={0},isp;
scanf("%d",&cnt);
bool dp[DPMAX]={false};
for(int i=0;i<cnt;i++)
scanf("%d",&sp[i]);
isp=sp[0];
for(int i=1;i<cnt;i++)
isp=gcd(isp,sp[i]);
if(isp==1)
{
dp[0]=true;
for(int i=0;i<cnt;i++)
for(int j=0;j+sp[i]<DPMAX;j++)
if(dp[j])
dp[j+sp[i]]=true;
int ans=0;
for(int i=0;i<DPMAX;i++)
if(dp[i]==false)
ans++;
printf("%d\n",ans);
}
else
printf("INF\n");
return EXIT_SUCCESS;
}
事实证明,我的推测是完全正确的,哈哈哈。
END