1. 程式人生 > >hdu 2566

hdu 2566

這道題可以用母函式做也可以直接暴力求解,但是本人母函式不熟悉,所以還是做做母函式的題目練練手吧。

程式碼:

#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;
}