(简单母函数进阶版,暴力)hdu 2069 Coin Change

//考查知识点:简单母函数进阶版—-二维母函数 表示苦涩难懂。。。/**********************************************************************************************二维母函数的模板大致如下:int c1[maxn][maxe],c2[maxn][mare];int a[num];第一步:简单初始化 memset(c1,0,sizeof(c1));memset(c2,0,sizeof(c2));第二步:使计算有循环区间,就是有值可以相加,相加零毕竟无意义。for(i=0;i<=maxe;++i)//inf为其中的限制条件c1[i]=1;第三步:对整个表达式进行逐个两两计算。for(i=2;i<=num-1;++i)//n-1个表达式,因为第一个与第二个合成的结果记为新的第一个表达式{for(j=0;j<=n;++j)//对所求的n个表达式之内的值进行计算,j表示前面j个表达式的结果中的第j项{for(k=0;k+j<=n;k+=a[i]){for(l=0;l+k/a[i]<=maxe;l++)c2[j+k][l+k/a[i]]+=c1[j][l];}}for(j=0;j<=n;++j){for(k=0;k<=maxe;++k){c1[j][k]=c[j][k];c2[j][k]=0;}}} 第四步:最后n的组成情况为:for(i=0;i<=maxe;++i)sum+=c1[n][i];printf("%d\n",sum); 使用情况:可以组分的情况有多种,,另外设立一个数组,主要的变化是在k的循环进行。**********************************************************************************/#include<stdio.h>#include<string.h>int c1[252][102],c2[252][102];int a[6]={0,1,5,10,25,50};int main(){int n;while(~scanf("%d",&n)){if(n==0){printf("1\n");continue;}int sum=0;memset(c1,0,sizeof(c1));memset(c2,0,sizeof(c2));int i,j,k,l;for(i=0;i<=100;++i){c1[i][i]=1;//////////////////////// }for(i=2;i<=5;++i){for(j=0;j<=n;++j){for(k=0;k+j<=n;k+=a[i]){for(l=0;l+k/a[i]<=100;l++)c2[j+k][l+k/a[i]]+=c1[j][l];///////////////}}for(j=0;j<=n;++j){for(k=0;k<=100;++k){c1[j][k]=c2[j][k];c2[j][k]=0;}}}for(i=0;i<=100;++i)sum+=c1[n][i];printf("%d\n",sum);}return 0;}法二:当初做的时候没想到-_-||,简单的暴力竟然也能过。。。

她是应该难过的往回走,还是蹲下来哭泣?

(简单母函数进阶版,暴力)hdu 2069 Coin Change

相关文章:

你感兴趣的文章:

标签云: