您的位置:首页 > 其它

HDU 1398

2014-04-13 21:22 155 查看
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1398

解题方案:利用指数母函数,套模板。

#include <iostream>
#include<cmath>
using namespace std;
const int _max = 100000;
// c1是保存各项质量砝码可以组合的数目
// c2是中间量,保存每一次的情况
int c1[_max], c2[_max];
int table[25];

void mtable()
{
int i;
for(i=1;i<=20;i++)
table[i]=i*i;
}

int main()
{
int i, j, k;
int num;
mtable();

while(cin>>num)
{
if(num==0)
break;
int tmp;
tmp=min(num,17);
for(i=0; i<=num; ++i)
{
c1[i] = 1;
c2[i] = 0;
}
for(i=2; i<=tmp; ++i)
{
for(j=0; j<=num; ++j)
for(k=0; k+j<=num; k+=table[i])
{
c2[j+k] += c1[j];
}

for(j=0; j<=num; ++j)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
cout << c1[num] << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: