好像只过了一个点……

大佬们看一下行吗,谢谢?

#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;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务