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;
}
}