hdu 2566

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Masqueradey/article/details/52549044

这道题可以用母函数做也可以直接暴力求解,但是本人母函数不熟悉,所以还是做做母函数的题目练练手吧。

代码:

#include<iostream>
#include<cstring>
using namespace std;
#define maxn 500
int c1[maxn][maxn],c2[maxn][maxn];//注意,因为题目对硬币数量进行了要求,所以利用二维数组的第二维来储存信息,第一维储存价值,第二维储存硬币个数
int b[4];
int main(){
    int i,j,k,kk,sum;
    int T,n,m;
    b[1]=1;
    b[2]=2;
    b[3]=5;
    cin>>T;
    while(T--){
       sum=0;
       cin>>n>>m;
       memset(c1,0,sizeof(c1));
       memset(c2,0,sizeof(c2));
       /* for(i=0;i<=n;i++)
		{
			c1[i][i]=1;
		}*/
		c1[0][0]=1;
       for(i=1;i<=3;i++)
       {
        for(j=0;j<=m;j++)
        for(k=0;k+j<=m;k+=b[i])
        {
         for(kk=0;kk+k/b[i]<=n;kk++)
         c2[k+j][kk+k/b[i]]+=c1[j][kk];
        }
        for(j=0;j<=m;j++)
        {
         for(k=0;k<=n;k++)
         {c1[j][k]=c2[j][k];c2[j][k]=0;}
        }
       }
    cout<<c1[m][n]<<endl;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/Masqueradey/article/details/52549044