题意:有 1 2^2 3^2...17^2 十七种硬币 问有多少种方式可以凑够 n
思路:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int c1[400],c2[400]; void fun(int n) { int i,j,k; for(i=0;i<=n;i++) { c1[i]=1; c2[i]=0; } for(i=2;i<=17;i++) { int add=i*i; for(j=0;j<=n;j++) { for(k=0;k+j<=n;k+=add) { c2[j+k]+=c1[j]; } } for(j=0;j<=n;j++) { c1[j]=c2[j]; c2[j]=0; } } } int main() { int n; int i,j,k; fun(300); while(scanf("%d",&n),n) { printf("%d ",c1[n]); } return 0; }