বুধবার, ২৫ অক্টোবর, ২০১৭

UVA 562 - Dividing coins

#include <bits/stdc++.h>
using namespace std;
long n,dp[110][110*500];
long coin[110],x;
long call(long i1,long wt)
{
    if(i1==n)
        return 0;
    if(dp[i1][wt]!=-1)
        return dp[i1][wt];
    long prof1=0,prof2=0;
    if((wt+coin[i1])<=x)
    {
        prof1=coin[i1]+call(i1+1,wt+coin[i1]);
    }
    else
        prof1=0;
    prof2=call(i1+1,wt);
    dp[i1][wt]=max(prof1,prof2);
    return dp[i1][wt];
}
main()
{
    long ts;
    cin>>ts;
    while(ts--)
    {
        long m,i,sum=0;
        cin>>n;
        for(i=0;i<n;i++)
           {
               cin>>coin[i];
               sum+=coin[i];
           }
        x=sum/2;
        memset(dp,-1,sizeof(dp));
        long ans=call(0,0);
        ans=sum-(ans*2);
        printf("%ld\n",ans);
    }
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...