杭电1085

这是一道变形的母函数题,如果你真正的理解了母函数模板的由来,那么我觉得后面所有的母函数都是很轻松解决的。但是如果你不是很了解各个变量的意义和变化的缘由,那么后面的母函数的题就会一塌糊涂,甚至是看不明白为什么。在前几篇的文章中我已经很明晰的分析了各个变量,以及变化的缘由,这里不再赘述,只是吧相应的思想说一下,不过还是建议不会的同学看看我前面几篇文章关于母函数的详解(虽然有的是转载的),只有真正弄明白了,你才可以才母函数上有多提高。

题目的大意就是:你有1分,2分,5分的硬币分别是num1,numn2,num5,那么用这些硬币币可以随意拼凑钱要求你输出你不能拼凑的钱的最小值。那么其实就是求一个性质上的,可不可以?而不是数值上的有多少,这就相对简单了。

前面的处理就是母函数的模板类型,不需要多说。

主要是循环怎么控制,之前就说过了三个循环,第一个是i的循环表示你有多个多项式相乘,第二和j表示的是每一个多项式里面的第几项,第三个k就是多项式里面的幂的变化(当然在这里只有三个变量,没有必要弄k出来,只要i,j,就够了。)

#include<iostream>
using namespace std;
#include<string>
const int Max=100003;
int main()
{
    int a[3]={1,2,5};
    int num1,num2,num5;
    int b[Max],c[Max],s,i,j;
    while((cin>>num1>>num2>>num5)&&(num1||num2||num5))
    {
        s=num1+num2*2+num5*5;
        for(i=0;i<=s;i++)
        {
            c[i]=0;
            b[i]=0;
        }
        for(i=0;i<=num1;i++)   //这个主要就是你有num1个1分的,那么num的范伟内的都是可以拼凑出来的。当然了0也是可以的。
            b[i]=1;
        for(i=0;i<=num1;i++)
            for(j=0;j<=num2*2;j+=2)   //这里主要是之前的num1个1分的完了之后在加上num2个2分的j是指每一个多项式的个数,共有num2个,当然算上
                c[i+j]=b[i];                //0就是num2加一个
            for(i=0;i<=num1+num2*2;i++)
            {
                b[i]=c[i];
                c[i]=0;
            }
            for(i=0;i<=num1+num2*2;i++)//这个是一样的道理。
                for(j=0;j<=num5*5;j+=5)
                c[j+i]=b[i];
                for(i=0;i<=s;i++)
                {
                    b[i]=c[i];
                    c[i]=0;
                }
                for(i=0;i<=s;i++)           
                    if(b[i]==0)
                    {
                        cout<<i<<endl;
                        break;
                    }
                    if(i==(s+1))             //最后这里讨论下,因为你的最大的表示金额是num1+num2*2+num5*5,
                        cout<<i<<endl;  //有可能这个范围的所有的数都可以拼凑出来。
                                }    return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值