// UVa 11450 - Wedding shopping
#include <iostream>
#include <string.h>
using namespace std;
int main() {
int cases;
for (cin >> cases; cases; cases--) {
int m, c, price[20][20], cant[20];
cin >> m >> c;
for (int i = 0; i < c; i++) {
cin >> cant[i];
for (int j = 0; j < cant[i]; j++)
cin >> price[i][j];
}
int T[2][200], R[401];
int now = 0;
int b4 = 1;
T[now][0] = 1;
T[now][1] = 0;
for (int i = 0; i < c; i++) {
b4 = now;
now = (now + 1) % 2;
T[now][0] = 0;
memset(R, false, sizeof(R));
for (int j = 0; j < cant[i]; j++) {
for (int k = 1; k <= T[b4][0]; k++) {
int pri = T[b4][k] + price[i][j];
if (pri <= m && !R[pri]) {
T[now][++T[now][0]] = pri;
R[pri] = true;
}
}
}
}
int sol = -1;
for (int k = 1; k <= T[now][0]; k++) {
if (T[now][k] > sol)
sol = T[now][k];
}
if (sol == -1)
cout << "no solution" << endl;
else
cout << sol << endl;
}
return 0;
}
Wednesday, December 23, 2015
UVa 11450 - Wedding shopping
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment