题目描述
要求放数字,左上角要小于其他位置, 问放数字的方法数有多少种。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 31;
ll k;
ll f[maxn][maxn][maxn][maxn][maxn];
int main()
{
while(cin >> k, k)
{
ll a[10] = {0};
for(ll i = 1; i <= k; i ++) cin >> a[i];
memset(f, 0, sizeof f);
f[0][0][0][0][0] = 1;
for(ll b = 0; b <= a[1]; b ++)
for(ll c = 0; c <= min(b, a[2]); c ++)
for(ll d = 0; d <= min(c,a[3]); d ++)
for(ll e = 0; e <= min(d, a[4]); e ++)
for(ll g = 0; g <= min(e,a[5]); g ++)
{
ll &v = f[b][c][d][e][g];
if(b && b > c) v += f[b-1][c][d][e][g];
if(c && c > d) v += f[b][c-1][d][e][g];
if(d && d > e) v += f[b][c][d-1][e][g];
if(e && e > g) v += f[b][c][d][e-1][g];
if(g) v += f[b][c][d][e][g-1];
}
cout << f[a[1]][a[2]][a[3]][a[4]][a[5]] << endl;
}
return 0;
}