... HAVE U TRIED .... AT LEAST 3 TIMES ... OK U CAN SEE THIS ...

Saturday, January 4, 2014

UVA-562 :: Dividing coins

//Problem link>>http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=503

#include <bits/stdc++.h>
#define mx 501*101
using namespace std ;

int coin [105] , n , dp[105][mx] ;
int call (int pos , int tot)
{
    if (pos>n) return 0 ;
    int  &rez=dp[pos][tot] ;
    if (rez != -1) return rez ;
    int ret1=0 , ret2=0 ;

    if (tot-coin[pos]==0) return rez=tot ;
    else if (tot-coin[pos]>0)
    {
        ret1=coin[pos]+call (pos+1 , tot-coin[pos]) ;
        ret2=call(pos+1 , tot) ;
        rez=max(ret1,ret2) ;
        return rez ;
    }
    return rez= call (pos+1,tot) ;
}

int main ()
{
    cout<<mx<<endl ;
    int t ,x ,i ;
    cin>>t;
    while (t--)
    {
        memset(dp,-1,sizeof (dp)) ;
        cin>>n ;
        int sum=0 ;
        for (i=1 ; i<=n ; i++)
        {
            cin>>coin[i] ;
            sum=sum+coin[i] ;
        }
         x = call (1,sum/2) ;

        int res=sum-x*2 ;
        cout<<res<<endl ;
    }

    return 0 ;
}

No comments:

Post a Comment