好像只过了一个点……
大佬们看一下行吗,谢谢?
#include <bits/stdc++.h> #define M 31 using namespace std; int n, m, ans=0; int a[6]; inline int read() { int re=0, f=1; char ch=getchar(); while(ch<'0' || ch>'9') {if(ch=='-') f=-1; ch=getchar();} while(ch>='0' && ch<='9') {re=re*10+(ch-'0'); ch=getchar();} return re*f; } int main() { while(~scanf("%d\n",&n) && n) { for(int i=1;i<=n;++i) a[i]=read(); long long f[a[1]+1][a[2]+1][a[3]+1][a[4]+1][a[5]+1]; memset(f,0,sizeof(f)); memset(a,0,sizeof(a)); f[0][0][0][0][0]=1; for(int i5=0;i5<=a[5];++i5) for(int i4=0;i4<=a[4];++i4) for(int i3=0;i3<=a[3];++i3) for(int i2=0;i2<=a[2];++i2) for(int i1=0;i1<=a[1];++i1) { if(i1<a[1]) f[i1+1][i2][i3][i4][i5]+=f[i1][i2][i3][i4][i5]; if(i2<a[2] && i2<i1) f[i1][i2+1][i3][i4][i5]+=f[i1][i2][i3][i4][i5]; if(i3<a[3] && i3<i2) f[i1][i2][i3+1][i4][i5]+=f[i1][i2][i3][i4][i5]; if(i4<a[4] && i4<i3) f[i1][i2][i3][i4+1][i5]+=f[i1][i2][i3][i4][i5]; if(i5<a[5] && i5<i4) f[i1][i2][i3][i4][i5+1]+=f[i1][i2][i3][i4][i5]; } printf("%lld\n",f[a[1]][a[2]][a[3]][a[4]][a[5]]); } return 0; }