最少硬币问题.cpp

来自「王晓东算法设计与分析课后一些题目的源码。vc下全都编译通过。且在学校网站上提交通」· C++ 代码 · 共 46 行

CPP
46
字号
#include<iostream>
using namespace std;
int mat[11][222222];
int elem[111];
int a[111];
const int MAX=INT_MAX/2;
int min(int a,int b)
{
    if(a<b) return a;
    else return b;
}
int main()
{
    int n,i,j,k;
    while(cin>>n)
    {
        for(i=1;i<=n;i++)
        {
            cin>>elem[i]>>a[i];
        }
        int m;
        cin>>m;
        for(i=0;i<11;i++)
        {
            for(j=0;j<222222;j++)
            {
                mat[i][j]=MAX;
            }
        }
        mat[0][0]=0;
        for(i=1;i<=n;i++)
        {
            for(j=0;j<=m;j++)
            {
                for(k=0;k<=a[i];k++)
                {
                    mat[i][j]=min(mat[i][j],mat[i-1][j-k*elem[i]]+k);
                }
            }
        }
        if(mat[n][m]==MAX) cout<<-1<<endl;
        else cout<<mat[n][m]<<endl;
    }
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?