22 21 22 140 81 12 23 24 25 86 97 68 8 Sample Output2445这个题 方法也很多, 这里用的母函数 来解决
母函数
http://blog.csdn.net/sizaif/article/details/55669439
//2079 组合数问题 母函数问题 #include<iostream>#include<cstring>#define min(a,b) ((a)<(b)?(a):(b)) using namespace std;//int min(int a,int b)//{// return a<b?a:b;//}int main(){ int last,last2; int i,j,k,nn,T,m; int v[55],n[55],a[200000],b[200000]; while(cin>>T) { while(T--) { cin>>nn>>m; for(i=0;i<m;i++) { cin>>v[i]>>n[i]; } last=0; a[0]=1; for(i=0;i<m;i++) { last2=min(last+v[i]*n[i],nn); memset(b,0,sizeof(int)*(last2+1)); for(j=0;j<=n[i]&&j*v[i]<=last2;j++)//n[i] 表示 有几门课 for(k=0;k<=last&&k+j*v[i]<=last2;k++) b[k+j*v[i]]+=a[k];//v[i]表示学分 memcpy(a,b,sizeof(int)*(last2+1)); last=last2; }// for(i=0;i<last;i++)// cout<<a[i]<<" "<<i<<" "<<last<<endl; cout<<a[nn]<<endl; } } return 0;}
新闻热点
疑难解答