美文网首页
零钱兑换(动态规划,招商银行FinTech)

零钱兑换(动态规划,招商银行FinTech)

作者: sunshine_9ab6 | 来源:发表于2018-07-04 21:55 被阅读0次

    参考文章链接:

    https://www.cnblogs.com/hapjin/p/5579737.html

    题目描述:

    牛牛开的银行里一共有n种硬币,第i种硬币价值为vi。

    妞妞来到牛牛的银行准备把k元钱兑换为零钱,牛牛想知道一共有多少种零钱兑换方案。例如,牛牛银行有1,2,5三种硬币,k=5,有以下兑换方案:

    11111,1112,122,5

    所以有4种兑换方案。

    输入描述:

    输入的第一行为询问数t(1<= t <= 100)。接下来每两行一个测试用例。第一行包含两个整数n和k(1<= n <=100,1<=k <=10000),表示硬币的种类数和妞妞需要兑换的钱数。第二行n个正整数vi(1<= vi <=200),表示每种硬币的面值

    输出描述:

    输出一个整数,表示兑换k元钱的方案数。因为答案方案数可能很大,输出对100000007取模的结果。

    示例1

    输入:

    1

    3 5

    1 2 5

    输出:

    4

    通过测试代码:

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    using namespace std;

    long long chargeTypes(vector coinsValues, long long n){

          long long m = coinsValues.size();

            vector>c;

            for(long long i=0;i

            {

                vectortmp(n+1,0);

                c.push_back(tmp);

            }

            for(long long i = 0; i <=m; i++)

                c[i][0] = 1;

            for(long long i = 1; i <=n; i++)

                c[0][i] = 0;

            for(long longi = 1; i <=m; i++)

            {

                for(long long j = 1; j <=n; j++)

                {

                    if(j < coinsValues[i-1])

                    {

                        c[i][j] = c[i-1][j];

                        continue;

                    }

                    c[i][j] = c[i-1][j] + c[i][j - coinsValues[i-1]];//coinsValues下标从0开始

                }

            }

            return c[m][n];

        }

    long long recursiveChargeTypes(vector coinsValues, long long m, long long n)

        {

            if(n == 0)

                return 1;

            if(n < 0)

                return 0;

            if(m <= 0)

                return 0;

            else

                return recursiveChargeTypes(coinsValues, m-1, n) + recursiveChargeTypes(coinsValues, m, n-coinsValues[m]);

        }

    int main()

    {

        int t;

        cin>>t;

        while(t--)

        {

            int nn,k;

            cin>>nn>>k;

            vectorcoinsValues;

            long long res=0;

            vectorquchong(201,0);

            for(long long i=0;i

            {

                long long tmp=0;

                cin>>tmp;

                if(quchong[tmp])

                {

                }

                else

                {

                    coinsValues.push_back(tmp);

                    quchong[tmp]=1;

                }

            }

            sort(coinsValues.begin(),coinsValues.end());

            res=chargeTypes(coinsValues, k);

            cout<

        }

        return 0;

    }

    相关文章

      网友评论

          本文标题:零钱兑换(动态规划,招商银行FinTech)

          本文链接:https://www.haomeiwen.com/subject/oswyuftx.html