SPOJ -PIGBANK – Piggy-Bank

#include<stdio.h>
typedef long long ll;
ll min(ll a,ll b)
{
 if(a<=b)
 return a;
 else return b;
}
int main()
{
 ll t,a,b;
 ll v[505],w[505];
 scanf("%lld",&t);
 ll dp[10002];
 while(t--)
 {
 scanf("%lld%lld",&a,&b);
 ll n;
 ll k=b-a;
 scanf("%lld",&n);
 for(ll i=1;i<=n;i++)
 scanf("%lld%lld",&v[i],&w[i]);
 for(ll i=1;i<=k;i++)
 dp[i]=-1;
 for(ll i=1;i<=k;i++)
 {
 for(ll j=1;j<=n;j++)
 {
 if(i>=w[j])
 {
 if(dp[i]==-1 && dp[i-w[j]]!=-1)
 dp[i]=v[j]+dp[i-w[j]];
 else if(dp[i-w[j]]!=-1)
 dp[i]=min(dp[i],v[j]+dp[i-w[j]]);
 }
 }
 }
 if(dp[k]==-1)
 printf("This is impossible.\n");
 else 
 printf("The minimum amount of money in the piggy-bank is %lld.\n",dp[k]);
 }
 return 0;
}

Leave a comment