#include <iostream>
#include <string.h>
using namespace std;
int le[30], n1[55], n2[55];
void GF() {
memset(n1, 0, sizeof(n1));
memset(n2, 0, sizeof(n2));
n1[0] = 1;
for (int i = 1; i <= 26; ++i) {
for (int j = 0; j <= 50; ++j)
for (int k = 0; k <= le[i] && k * i + j <= 50; k++)
n2[j + k * i] +=
n1[j]; // 这和前面的判断是否存在(只需赋值 为1)组合不同
for (int j = 0; j <= 50; ++j) {
n1[j] = n2[j]; // k从0开始保证了n1[x]只增不减
n2[j] = 0;
}
}
}
int main() {
int N;
cin >> N;
while (N--) {
for (int i = 0; i < 26; i++) {
cin >> le[i + 1];
}
GF();
int sum = 0;
for (int i = 1; i <= 50; i++)
sum += n1[i];
cout << sum << endl;
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容