Wednesday, December 23, 2015

UVa 11450 - Wedding shopping

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

No comments:

Post a Comment