• hdu2082:简单母函数


    题目大意:

    a,b,c,d...z这些字母的价值是1,2,3......26

    给定 这26个字母分别的数量,求总价值不超过50的单词的数量

    分析:

    标准做法是构造母函数

    把某个单词看作是,关于x的多项式,在这个多项式中

    形如 a*x^b 这样的项就代表 价值为b的单词有a个。。

    做法:

    = =其实不知道母函数也完全可以做。。就是个很简单的dp嘛。。

    代码:

    #include <iostream>
    #include <stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<string>
    #include<ctype.h>
    using namespace std;
    #define MAXN 10000
    int dp[30][60];
    int a[30];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            for(int i=1;i<=26;i++)
            {
                scanf("%d",a+i);
            }
            memset(dp,0,sizeof(dp));
            dp[0][0]=1;
            for(int i=1;i<=26;i++)
            {
                for(int j=0;j<=50;j++)
                {
                    for(int k=0;k<=a[i];k++)
                    {
                        if(j-k*i<0)
                            continue;
                        dp[i][j]+=dp[i-1][j-k*i];
                    }
                }
            }
            int ans=0;
            for(int i=1;i<=50;i++)
            {
                ans+=dp[26][i];
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    隐式类型转换
    STL::allocator rebind
    Proxy Class(代理类)
    C++ 没有合适的默认构造函数(无参数构造函数)
    E
    C
    Multiplication Puzzle POJ
    Brackets POJ
    Halloween Costumes LightOJ
    ACwing 139. 回文子串的最大长度(二分+Hash)
  • 原文地址:https://www.cnblogs.com/oneshot/p/4081392.html
Copyright © 2020-2023  润新知