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