Calculator_T1781 Coin Change_dp

//
#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);
    }
}

Guess you like

Origin blog.csdn.net/qq_63173957/article/details/123891455