母函数讲解

来源:互联网 发布:网络信息工作领导小组 编辑:程序博客网 时间:2024/05/29 08:41

转载出处:

http://blog.csdn.net/xiaofei_it/article/details/17042651

hdu 2082

#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int dp1[55],dp2[55];int v[30];int num[30];void solve(){memset(dp1,0,sizeof(dp1));memset(dp2,0,sizeof(dp2));dp1[0]=1;for(int i=1;i<=26;i++){for(int j=0;j<=num[i]&&j*v[i]<=50;j++){for(int k=0;k+v[i]*j<=50;k++){dp2[k+j*v[i]]+=dp1[k];}}for(int j=0;j<=50;j++){dp1[j]=dp2[j];dp2[j]=0;}}}int main(){int T;cin>>T;while(T--){memset(v,0,sizeof(v));for(int i=1;i<=26;i++){v[i]=i;cin>>num[i];}solve();int ans=0;for(int i=1;i<=50;i++){ans+=dp1[i];}cout << ans << endl;}}

#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int dp1[55],dp2[55];int v[30];int num[30];void solve(){    memset(dp1,0,sizeof(dp1));    memset(dp2,0,sizeof(dp2));    dp1[0]=1;    for(int i=1;i<=26;i++)    {        for(int j=0;j<=50;j++)        {            for(int k=0;k<=num[i]&&k*v[i]+j<=50;k++)            {                dp2[j+k*v[i]]+=dp1[j];            }        }        for(int j=0;j<=50;j++)        {            dp1[j]=dp2[j];            dp2[j]=0;        }    }}int main(){    int T;    cin>>T;    while(T--)    {        memset(v,0,sizeof(v));        for(int i=1;i<=26;i++)        {            v[i]=i;            cin>>num[i];        }        solve();        int ans=0;        for(int i=1;i<=50;i++)        {            ans+=dp1[i];        }        cout << ans << endl;    }}

更多:http://www.cnblogs.com/lijunle/archive/2010/09/04/1817764.html



原创粉丝点击