ABA12C - Buying Apples! - SPOJ Solution C++

Problem Link : ABA12C

 

Hint : Simple 2D DP

 

C++ Solution :

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	int arr[101];
	long long int dp[101][101];
	cin>>t;
	while(t--)
	{
	    long long int ans=LONG_MAX;
		int n,k;
		cin>>n>>k;
		for(int i=0;i<=n;i++)
			for(int j=0;j<=k;j++)
				dp[i][j]=INT_MAX;
		for(int i=1;i<=k;i++)
			cin>>arr[i];
	
		dp[0][0]=0;	
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=k;j++)
			{
				    for(int w=1;w<=j;w++)
				        if(arr[w]!=-1)
					        dp[i][j]=min(dp[i][j],dp[i-1][j-w]+arr[w]);
			}
		}

		for(int i=1;i<=n;i++)
		    ans=min(ans,dp[i][k]);
		if(ans>=INT_MAX)
		    cout<<"-1"<<endl;
		else    
		    cout<<ans<<endl;
	}
}