//https://www.luogu.com.cn/problem/SP15637
#include<bits/stdc++.h>
#include<unordered_map>
#include<array>
#define ll long long
#define ull unsigned long long
#define all(a) a.begin(),a.end()
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-8;
const ll mod = 1e9 + 7;
const int N = 5e3 + 5;
int dp[31][16][11][8][7];//每一维度表示每排站多少人
void solve()
{
int n[6], k;
while (cin >> k, k)
{
memset(n, 0, sizeof n);
for (int i = 1; i <= k; i++)
cin >> n[i];
memset(dp, 0, sizeof dp);
dp[0][0][0][0][0] = 1;
for (int i = 0; i <= n[1]; i++)
for (int j = 0; j <= n[2]; j++)
for (int p = 0; p <= n[3]; p++)
for (int q = 0; q <= n[4]; q++)
for (int l = 0; l <= n[5]; l++)
{
if (i < n[1])
dp[i + 1][j][p][q][l] += dp[i][j][p][q][l];
if (j < n[2] && j < i)
dp[i][j + 1][p][q][l] += dp[i][j][p][q][l];
if (p < n[3] && p < j)
dp[i][j][p + 1][q][l] += dp[i][j][p][q][l];
if (q < n[4] && q < p)
dp[i][j][p][q + 1][l] += dp[i][j][p][q][l];
if (l < n[5] && l < q)
dp[i][j][p][q][l + 1] += dp[i][j][p][q][l];
}
cout << dp[n[1]][n[2]][n[3]][n[4]][n[5]] << '\n';
}
}
signed main()
{
IOS;
int t = 1;
//cin >> t;
while (t--)
solve();
return 0;
}
SP15637 GNYR04H - Mr Youngs Picture Permutations,dp7
于 2022-09-06 18:58:12 首次发布