https://www.luogu.com.cn/problem/SP15637
算法:(线性DP);
代码:
#include<bits/stdc++.h>
using namespace std;
int t,n[10];
int main(){
while(cin>>t){
if(t==0){
return 0;
}
memset(n,0,sizeof(n));
for(int i=1;i<=k;i++){
cin>>n[i];
}
unsigned long long f[31][16][11][9][7];
memset(f,0,sizeof(f));
f[0][0][0][0][0]=1;
for(int i=0;i<=n[1];i++){
for(int j=0;j<=n[2];j++){
for(int k=0;k<=n[3];k++){
for(int l=0;l<=n[4];l++){
for(int m=0;m<=n[5];m++){
int point=f[i][j][k][l][m];
if(i<n[1]) f[i+1][j][k][l][m]+=point;
if(j<n[2]&&j<i) f[i][j+1][k][l][m]+=point;
if(k<n[3]&&k<j) f[i][j][k+1][l][m]+=point;
if(l<n[4]&&l<k) f[i][j][k][l+1][m]+=point;
if(m<n[5]&&m<l) f[i][j][k][l][m+1]+=point;
}
}
}
}
}
cout<<f[n[1]][n[2]][n[3]][n[4]][n[5]]<<endl;
}
return 0;
}