AcWing 271. 杨老师的照相排列(Java)
原题链接
简单
作者:
上杉
,
2021-04-17 19:00:23
,
所有人可见
,
阅读 351
import java.util.*;
public class Main{
static int N = 31;
static long[][][][][] dp = new long[N][N][N][N][N];
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while(true){
int k = input.nextInt();
if(k == 0)break;
int[] cnt = new int[5];
for(int i = 0 ; i < k ; i++){
cnt[i] = input.nextInt();
}
dp[0][0][0][0][0] = 1;
for(int a = 0 ; a <= cnt[0] ; a++){
for(int b = 0 ; b <= Math.min(a,cnt[1]) ; b++){
for(int c = 0 ; c <= Math.min(b,cnt[2]) ; c++){
for(int d = 0 ; d <= Math.min(c,cnt[3]); d++){
for(int e = 0 ; e <= Math.min(d,cnt[4]); e++){
if(a > 0)dp[a][b][c][d][e] = dp[a-1][b][c][d][e];
if(b > 0)dp[a][b][c][d][e] += dp[a][b-1][c][d][e];
if(c > 0)dp[a][b][c][d][e] += dp[a][b][c-1][d][e];
if(d > 0)dp[a][b][c][d][e] += dp[a][b][c][d-1][e];
if(e > 0)dp[a][b][c][d][e] += dp[a][b][c][d][e -1];
}
}
}
}
}
System.out.println(dp[cnt[0]][cnt[1]][cnt[2]][cnt[3]][cnt[4]]);
}
}
}