给出你定值硬币的数量,问你这些硬币不能组成的最小价值是多少。

这个题嘛,乱搞,dp,找规律都行,但是学长说这个用母函数做。。。


乱搞代码:

StatusAccepted
Memory1560kB
Length486
LangG++
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int x, y, z, ans, j;
    while(~scanf("%d%d%d",&x,&y,&z)&&x+y+z){
        ans=0;
        int up=x+y*2+z*5+1;
        for(j=1;j<=up;j++){
            int i=j;
            int zz=i/5;
            if(zz<=z)i-=zz*5;
            else i-=z*5;
            int yy=i/2;
            if(yy<=y)i-=yy*2;
            else i-=y*2;
            if(i>x){ans=1;break;}
        }
        printf("%d\n", j);
    }
    return 0;
}


找规律的话:

若有1,则从1到n1+2*n2的数肯定都能拼成,

最后,只需考虑5的个数,若n1+2*n2能达到4以上,则在所有的5组合的过成中,中间的4个间隔可以由n1+2*n2

填充,这时设其总和为S,则1到S之间的数都可以组成;,若n1+2*n2不能达到4,则在开始达到5之前就断开了达不到5,就不用再去组合5的个数了

if(a+b*2<4)
  printf("%d\n",a+2*b+1); 
else
  printf("%d\n",a+2*b+c*5+1);