#include <stdio.h>
#include <string.h>
int a[100];
int dp[100][1000];
int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
int n,m,i,j,k,ans;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
dp[i][j]=9999;
for (i=2;i<=n;i++)
for (j=0;j<=m;j++)
{
ans=99999;
for (k=0;k<=j/a[i];k++)
ans=min(ans,dp[i-1][j-k*a[i]]+k);
dp[i][j]=ans;
}
printf("%d\n",dp[n][m]<m?dp[n][m]:-1);
return 0;
}
硬币找零问题(完全背包)
最新推荐文章于 2024-07-02 19:49:27 发布