/* Solution to problem: 181 - Scuba diver (From the Sphere Online Judge - http://www.spoj.pl) Author: Andres Mejia-Posada http://blogaritmo.factorcomun.org */ #include using namespace std; int main(){ int C; cin >> C; while (C--){ int O, N, Y; cin >> O >> N >> Y; int w[Y+1], oxy[Y+1], nitro[Y+1]; for (int i=1; i<=Y; ++i){ cin >> oxy[i] >> nitro[i] >> w[i]; } //dp[i][o][n] = minimum weight needed to have o-oxygen and n-nitrogen (or more) using the first i cylinders. unsigned int dp[Y+1][O+1][N+1]; for (int i=0; i<=Y; ++i){ for (int o=0; o<=O; ++o){ for (int n=0; n<=N; ++n){ dp[i][o][n] = INT_MAX; } } } dp[1][0][0] = 0; for (int o=1; o<=oxy[1]; ++o){ for (int n=1; n<=nitro[1]; ++n){ dp[1][o][n] = w[1]; } } for (int i=2; i<=Y; ++i){ for (int o=0; o<=O; ++o){ for (int n=0; n<=N; ++n){ dp[i][o][n] = min(dp[i-1][o][n], dp[i-1][max(0, o-oxy[i])][max(0, n-nitro[i])] + w[i]); } } } cout << dp[Y][O][N] << endl; } return 0; }