範例程式碼 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;
}