hdu 2566
阿新 • • 發佈:2018-11-30
這道題可以用母函式做也可以直接暴力求解,但是本人母函式不熟悉,所以還是做做母函式的題目練練手吧。
程式碼:
#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; }