杭电2082

本文介绍了一种基于有限域的运算实现方法,并通过具体的C语言代码示例展示了如何进行有限域元素的生成及统计小于特定值的所有可能组合数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<string.h>
 
int le[30],n1[55],n2[55];
 
void GF(  )
{
     memset(n1,0,sizeof(n1));
     memset(n2,0,sizeof(n2));
     n1[0]=1; //在上一篇报告里面讲过其作用,可以说是一个入口
     for(int i=1;i<=26;++i)
     {
          for(int j=0;j<=50;++j) 
          // j从0开始还是为了保留未参与合并的原值
          for(int k=0;k<=le[i]&&k*i+j<=50;k++)
          // k从0开始是为了保留n1[x]中原有的值,不至于在
          // 后面n1[x]=n2[x]语句中出现n1[x]数据丢失。
               n2[j+k*i]+=n1[j]; // 这和前面的判断是否存在(只需赋值 为1)组合不同
          for(int j=0;j<=50;++j)
          {
               n1[j]=n2[j]; // k从0开始保证了n1[x]只增不减
               n2[j]=0;
          }
     }
}
 
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
         int cnt=0;
         for(int i=1;i<=26;++i)
             scanf("%d",&le[i]);
         GF();
         for(int i=1;i<=50;++i) // 题目是要统计小于50的所有可能
             cnt+=n1[i];
         printf("%d\n",cnt);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值