母函数(模板)找单词

#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
const int  maxn = 50;

int num[maxn + 1];
int c1[maxn + 1], c2[maxn + 1];

int main()
{
    int T;
    scanf("%d",&T);
    while(T --)
    {
        for(int i = 1; i <= 26; i ++)
            scanf("%d", &num[i]);
        memset(c1, 0, sizeof c1);
        memset(c2, 0, sizeof c2);
        for(int i = 0; i <= num[0]; i ++)
            c1[i] = 1;

        for(int i = 1; i <= 26; i ++)    //共有26个多项式
        {
//            if(num[i] == 0) continue;
            for(int j = 0; j <= maxn; j ++)  //共有maxn+1项
            {
                for(int k = 0; k <= num[i]*i && j + k <= maxn; k +=i)
                    c2[j + k] += c1[j];
            }
            for(int j = 0; j <= maxn; j ++)
            {
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
        int sum = 0;
        for(int j = 1; j <= maxn; j ++)
            sum += c1[j];
        printf("%d\n",sum);
    }
    return 0;
}
//母函数模板(找单词)
母函数模板(一会自己打一遍,速度要快啊,自己已经是大二的了)
自己又打了一遍代码,发现了一些坑点,a1[0]刚开始要赋值为1,
<pre name="code" class="cpp">#include<stdio.h>
#include<string.h>
int main()
{
    int a[60],a1[60],q[30];
    int n;
    scanf("%d",&n);
    while(n--)
    {
        for(int i=1; i<=26; i++)
            scanf("%d",&q[i]);
        memset(a,0,sizeof(a));
        memset(a1,0,sizeof(a1));
        a1[0]=1;
坑点坑点坑点!!!!!!!
//        for(int i=0; i<=q[1]; i++)
//            a1[i]=1;
        for(int i=1; i<=26; i++)
        {
26是元素的数目
            if(!q[i])
                continue;
            for(int j=0; j<=50; j++)
这个是最大值
                for(int k=0; k+j<=50&&k<=q[i]*i; k+=i)
这个算是限制条件吧
                    a[j+k]+=a1[j];
下面清空
            for(int j=0; j<=50; j++)
            {
                a1[j]=a[j];
                a[j]=0;
            }
        }
        int ans=0;
        for(int i=1; i<=50; i++)
            ans+=a1[i];
        printf("%d\n",ans);
    }
    return 0;
}
模仿建立模型就好,这个得自己建立模型,加油,大二!!!


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值