HDU1398母函数
http://acm.hdu.edu.cn/showproblem.php?pid=1398
将增量存在数组中,这次有17个表达式相乘。
#include
<
iostream
>
using namespace std;
const int M = 301 ;
int table[ 18 ] = {
0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 100 , 121 , 144 , 169 , 196 , 225 , 256 , 289 }; // 存储第i个表达式的增量
int a[M];
int b[M];
int main()
{
int i,j,k,n;
while (scanf( " %d " , & n) != EOF,n)
{
for (i = 0 ;i <= n;i ++ )
{
a[i] = 1 ;
b[i] = 0 ;
}
for (i = 2 ;i <= 17 ;i ++ ) // 17个表达式
{
for (j = 0 ;j <= n;j ++ )
for (k = 0 ;k + j <= n;k += table[i]) // 增量为table[i]
b[k + j] += a[j];
for (j = 0 ;j <= n;j ++ )
{
a[j] = b[j];
b[j] = 0 ;
}
}
printf( " %d\n " ,a[n]);
}
return 0 ;
}
using namespace std;
const int M = 301 ;
int table[ 18 ] = {
0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 100 , 121 , 144 , 169 , 196 , 225 , 256 , 289 }; // 存储第i个表达式的增量
int a[M];
int b[M];
int main()
{
int i,j,k,n;
while (scanf( " %d " , & n) != EOF,n)
{
for (i = 0 ;i <= n;i ++ )
{
a[i] = 1 ;
b[i] = 0 ;
}
for (i = 2 ;i <= 17 ;i ++ ) // 17个表达式
{
for (j = 0 ;j <= n;j ++ )
for (k = 0 ;k + j <= n;k += table[i]) // 增量为table[i]
b[k + j] += a[j];
for (j = 0 ;j <= n;j ++ )
{
a[j] = b[j];
b[j] = 0 ;
}
}
printf( " %d\n " ,a[n]);
}
return 0 ;
}