hdu 2079 选课时间(母函数)
母函数
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> using namespace std; int dp[50]; struct Clas { int v,c; }; Clas cla[50]; int c1[500000]; int c2[500000]; int t,n,m; int sum; void fun() { int i,j,k; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); c1[0]=1; for(i=0;i<n;i++) { int add=cla[i].v; for(j=0;j<=m;j++) { for(k=0;k<=cla[i].c*add&&k+j<=m;k+=add) { c2[j+k]+=c1[j]; } } for(j=0;j<=m;j++) { c1[j]=c2[j]; c2[j]=0; } } } int main() { int i,j,k; scanf("%d",&t); while(t--) { //sum=0; scanf("%d%d",&m,&n); for(i=0;i<n;i++) { scanf("%d%d",&cla[i].v,&cla[i].c); //sum+=cla[i].v*cla[i].c; } fun(); printf("%d\n",c1[m]); } return 0; }
觉得这个多重背包写的很赞
http://www.cnblogs.com/jiangjing/archive/2013/04/09/3010802.html