码迷,mamicode.com
首页 > 其他好文 > 详细

HDU2110 Crisis of HDU【母函数】

时间:2015-05-15 10:46:59      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2110


题目大意:

公司有N种价值的资产,每种价值的资产数量已知,问能否得到总资产1/3的分割资产方法。

问:分割资产的方案数是多少(mod 10000)。


思路:

给定N种价值的资产,设每种价值Pi的数量为Mi,则总资产为sum = Σ Pi*Mi (1 <= i <= N)。

可得母函数g(x) = Π(1 + x^Pi + x^(2*Pi) + … + x^(Pi*Mi) ) (1 <= i <= N)。找到sum/3的

系数即可。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

int c1[10010],c2[10010];
int p[110],m[110];

int main()
{
    int N;
    while(cin >> N && N)
    {
        int sum = 0,num = 0;
        for(int i = 0; i < N; ++i)
        {
            cin >> p[i] >> m[i];
            sum += p[i]*m[i];
        }
        if(sum % 3 == 0)
        {
            int s = sum/3;
            for(int i = 0; i <= sum; ++i)
                c1[i] = c2[i] = 0;
            for(int i = 0; i <=p[0]*m[0]; i += p[0])
                c1[i] = c2[i] = 1;
            num = p[0]*m[0];
            for(int i = 1; i < N; ++i)
            {
                for(int j = 0; j <= num; ++j)
                {
                    int k = 1;
                    if(k*p[i] + j > s)
                        break;
                    for( ; k <= m[i]; ++k)
                    {
                        if(k*p[i] + j > s)
                            break;
                        c1[k*p[i]+j] += c2[j];
                        c1[k*p[i]+j] %= 10000;
                    }
                }
                num += p[i]*m[i];
                for(int j = 0; j <= num; ++j)
                {
                    c2[j] = c1[j];
                }
            }
            if(c1[s] == 0)
                cout << "sorry" << endl;
            else
                cout << c1[s] << endl;
        }
        else
            cout << "sorry" << endl;
    }

    return 0;
}



HDU2110 Crisis of HDU【母函数】

标签:

原文地址:http://blog.csdn.net/lianai911/article/details/45740081

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!