状态转移

b[i]记录价值为i的单词种类数

d[j+k*i]+=b[j] , k<=a[i]&&j+k*i<=50

表示价值为j+k*i的单词可以由价值为j的单词加上k个i字母转移而来

最后统计即可

#include<stdio.h>
int main(){
    int T,t,i,j,k,a[27]={0},b[51],d[51],s;
    scanf("%d",&T);
    for(t=0;t<T;t++){
        for(i=1;i<27;i++)
            scanf("%d",&a[i]);
        for(i=0;i<51;i++)
            b[i]=d[i]=0;
        b[0]=1;
        for(i=1;i<27;i++){
            for(j=0;j<51;j++)
                for(k=0;k<=a[i]&&j+k*i<=50;k++)
                    d[j+k*i]+=b[j];
            for(j=0;j<51;j++){
                b[j]=d[j];
                d[j]=0;
            }
        }
        for(s=0,i=1;i<51;i++)
            s+=b[i];
        printf("%d\n",s);
    }
    return 0;
}

 

相关文章:

  • 2021-05-31
  • 2021-11-04
  • 2022-02-19
  • 2022-12-23
  • 2021-08-02
  • 2021-07-21
  • 2021-12-21
  • 2021-10-31
猜你喜欢
  • 2021-12-08
  • 2021-12-21
  • 2021-05-29
  • 2021-05-19
  • 2021-05-31
  • 2021-10-15
  • 2022-01-31
相关资源
相似解决方案