//
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int max_money=1e5+1e4;
const int coin_type_cnt=55;
int type[coin_type_cnt];
int dp[max_money];
int path[max_money];
int n,m;
void solve()
{
memset( dp,0x3f,sizeof( dp ) );
int i,j;
dp[0]=0;
for( j=0;j<n;j++ )
for( i=type[j];i<m+111;i++ )
if( dp[i] > dp[ i-type[j] ]+1 )
{
dp[i]=dp[ i-type[j] ]+1;
path[i]=type[j];
}
}
void out( int money )
{
vector<int> v;
while( path[money] && money>0 )
{
v.push_back(path[money]);
money-=path[money];
}
reverse( v.begin(),v.end() );
for( int i=0;i<v.size();i++ ) cout<<v[i]<<" ";
cout<<endl;
}
int main()
{
while( cin>>n>>m )
{
for( int i=0;i<n;i++ ) cin>>type[i];
solve();
// for( int i=0;i<m+11;i++ )
// cout<<dp[i]<<" ";
// cout<<endl;
//
// for( int i=0;i<m+11;i++ )
// cout<<path[i]<<" ";
// cout<<endl;
if( dp[m]==INF ) cout<<-1<<endl;
else cout<<dp[m]<<endl;
// if( dp[m]!=INF ) out(m);
}
}
Calculator_T1781 Coin Change_dp
Guess you like
Origin blog.csdn.net/qq_63173957/article/details/123891455
Ranking