hdu 2079 普通母函数的应用

  题意是有k个物品, 每个物品b[i]个, 且每个物品重a[i], 求从这些物品中取出的物品总重为n的方案数, 典型的求解多重集组合数, 代码如下:

#include <algorithm>
#include <cstring>
#include <iostream>

using namespace std;
int n, k;
int a[10], m[10];  //学分为a[i]的课有m[i]门
int c1[45], c2[45];

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        cin>>n>>k;
        for(int i=1; i<=k; i++)
            cin>>a[i]>>m[i];
        memset(c1, 0, sizeof(c1));
        memset(c2, 0, sizeof(c2));
        for(int i=0; i<=m[1]&&i<=40; i+=a[1]) c1[i]=1;
        for(int i=2; i<=k; i++)
        {
            for(int j=0; j<=40; j++)
                for(int kk=0; kk<=a[i]*m[i]; kk+=a[i]) if(j+kk<=40)
                    c2[j+kk] += c1[j];
            for(int j=0; j<=40; j++) c1[j]=c2[j], c2[j]=0;
        }
        cout<<c1[n]<<endl;
    }
    return 0;
}

 

posted @ 2016-02-25 16:52  xing-xing  阅读(467)  评论(0编辑  收藏  举报