#include <iostream>
#define INF 100000000
using namespace std;
int arr[100][2], sumOfValues, n, dp[100][10000];
int solve(int index, int currentSum){
if(index == n){
if(currentSum == sumOfValues) return 0;
else return -INF;
}
if(dp[index][currentSum] != -1) return dp[index][currentSum];
int v1 = solve(index+1, currentSum + arr[index][1]) + arr[index][0]; //take current element
int v2 = solve(index+1, currentSum); //do not take current element
return dp[index][currentSum] = max(v1, v2);
}
int main() {
n = 5;
sumOfValues = 6;
arr[0][0] = 3;arr[0][1] = 3;
arr[1][0] = 4;arr[1][1] = 3;
arr[2][0] = 3;arr[2][1] = 2;
arr[3][0] = 2;arr[3][1] = 2;
arr[4][0] = 2;arr[4][1] = 1;
for(int i = 0;i < 100;i++) for(int j = 0;j < 10000;j++) dp[i][j] = -1;
cout << solve(0, 0) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojZGVmaW5lIElORiAxMDAwMDAwMDAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBhcnJbMTAwXVsyXSwgc3VtT2ZWYWx1ZXMsIG4sIGRwWzEwMF1bMTAwMDBdOwoKaW50IHNvbHZlKGludCBpbmRleCwgaW50IGN1cnJlbnRTdW0pewogICAgaWYoaW5kZXggPT0gbil7CiAgICAgICAgaWYoY3VycmVudFN1bSA9PSBzdW1PZlZhbHVlcykgcmV0dXJuIDA7CiAgICAgICAgZWxzZSByZXR1cm4gLUlORjsKICAgIH0KICAgIGlmKGRwW2luZGV4XVtjdXJyZW50U3VtXSAhPSAtMSkgcmV0dXJuIGRwW2luZGV4XVtjdXJyZW50U3VtXTsKICAgIGludCB2MSA9IHNvbHZlKGluZGV4KzEsIGN1cnJlbnRTdW0gKyBhcnJbaW5kZXhdWzFdKSArIGFycltpbmRleF1bMF07ICAgIC8vdGFrZSBjdXJyZW50IGVsZW1lbnQKICAgIGludCB2MiA9IHNvbHZlKGluZGV4KzEsIGN1cnJlbnRTdW0pOyAgICAvL2RvIG5vdCB0YWtlIGN1cnJlbnQgZWxlbWVudAogICAgcmV0dXJuIGRwW2luZGV4XVtjdXJyZW50U3VtXSA9IG1heCh2MSwgdjIpOwp9CgppbnQgbWFpbigpIHsKICAgIG4gPSA1OwogICAgc3VtT2ZWYWx1ZXMgPSA2OwogICAgYXJyWzBdWzBdID0gMzthcnJbMF1bMV0gPSAzOwogICAgYXJyWzFdWzBdID0gNDthcnJbMV1bMV0gPSAzOwogICAgYXJyWzJdWzBdID0gMzthcnJbMl1bMV0gPSAyOwogICAgYXJyWzNdWzBdID0gMjthcnJbM11bMV0gPSAyOwogICAgYXJyWzRdWzBdID0gMjthcnJbNF1bMV0gPSAxOwogICAgZm9yKGludCBpID0gMDtpIDwgMTAwO2krKykgZm9yKGludCBqID0gMDtqIDwgMTAwMDA7aisrKSBkcFtpXVtqXSA9IC0xOwogICAgY291dCA8PCBzb2x2ZSgwLCAwKSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=