範例程式碼 uva12455

//uva12455
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
	int t, m, n;
	string s;
	vector<int> a(20);
	vector< vector<bool> > b( 20, vector<bool>(20010) );

	scanf("%d", &t);
	for (int k = 0; k < t; ++k) {
		s = "NO";
		scanf("%d%d", &m, &n);
		for (int i = 0; i < n; ++i)
			scanf("%d", &a[i]);

		for (int i = 0; i < n; ++i)
			for (int j = 0; j <= m; ++j)
				b[i][j] = false;

		b[0][0] = true;
		b[0][ a[0] ] = true;
		if (a[0] == m)
			s = "YES";

		for (int i = 1; i < n; ++i) {
			for (int j = 0; j <= m; ++j)
				if (b[i - 1][j] == true) {
					b[i][j] = true;
					b[i][j + a[i]] = true;
				}
			if (b[i][m] == true) {
				s = "YES";
				break;
			}
		}

		cout << s << endl;
	}

	return 0;
}