📄 最少硬币问题.cpp
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -