【母函数】hdu1398(Square Coins)

hdu1398

构造母函数:G(x)=(1+x+x2+x3+x4+…)(1+x4+x8+x12+…)(1+x9+x18+x27+…)…第一个多项式表示1分币的个数从1个开始,第二个多项式表示4分币的个数,从1开始,第三个多项式表示9分币的个数,相乘就可以得到不同币不同个数的组合。


import java.util.*;
class Main{
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		final int max=301;
		while(sc.hasNext()){
			int n=sc.nextInt();
			if(n==0){
				break;
			}
			int []result=new int[max];
			int []change=new int[max];
			for(int i=0;i<=n;i++){
				result[i]=1;
			}
			for(int i=2;i<=17;i++){
				for(int j=0;j<=n;j++){
					for(int k=0;k+j<=n;k+=i*i){//k+j表示第一个式子的k次方和第二个式子的j次方相乘所得的次方数
						change[j+k]+=result[j];//k+j次方项的个数,从而得到其系数
					}
				}
				for(int j=0;j<=n;j++){
					result[j]=change[j];
					change[j]=0;
				}
			}
			System.out.println(result[n]);
		}
	}
}


你可能感兴趣的:(【母函数】hdu1398(Square Coins))