hdu 1085 Holding Bin-Laden Captive!(生成函数)

题目链接:哆啦A梦传送门

题意:已知有a个1,b个2,c个5,问:最小不能组成的数是多少?

解:

1,a==0时,此时最小不能组成的数是1。

2,当a+2*b<4时,此时最小不能组成的数是a+2*b+1。

3,其它条件,最小不能组成的数是a+2*b+5*c+1。

 

我们知道当a+2*b>=4且a!=0时,单单这两个数字的组合,就能构成范围在 [1,a+2*b]中的任何一个数,因为这范围内的任何一个数可看成是2*t+y(y=0||y=1),所给条件恰好满足此方程。这也就是说前4个数一定能组成,那么大于等于5的数,我们也可以看成是5*t+y(y<=4)。故就能解释上文提到的。


#include<bits/stdc++.h>
using namespace std;


int main()
{
    int a,b,c;

    while(~scanf("%d%d%d",&a,&b,&c))
    {

        if(a==0&&b==0&&c==0) break;
        if(a==0){
            puts("1");
        }
        else if(a+2*b<4){
            printf("%d\n",a+2*b+1);
        }
        else printf("%d\n",a+2*b+5*c+1);
    }

    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值