#include <iostream>
using namespace std;
//
const int maxx = ;
// sup是保存多项式的数组,sup[n]中的值代表指数为i的系数 ,下标i是x的指数
// temp是临时多项式,保存相乘的临时中间情况 (合并相同指数的多项式)
int sup[maxx], temp[maxx];
/*
程序始终只计算两个多项式之间的乘积,多个多项式的情况
先计算前两个的乘积,将结果作为第一个多项式,再与第三个相乘
依次类推,sup始终存放当前运算后的结果然后作为被乘多项式,
*/ int main()
{
int target; // 目标重量, 比如上面的例子里就是10,要<max的值
int i, j, k; while(cin >> target)
{
for(i=; i<=target; ++i)
{ //初始化第一个多项式,也就是用1g砝码的多项式, 注意如果题目没给1g的砝码那么就不能++i,而要加上砝码的质量
sup[i] = ;
temp[i] = ; //将临时区清空,无论第一个多项式质量是几都要全部置零
} for(i=; i<=target; ++i) //后面有n-1个表达式(括号里的式子),要展开n-1次,i指第i个表达式
// 生成后续的第i个多项式,此题中是2g,i从2开始。
//如果砝码的值不是规律增长,i可能需要取决于输入
{
for(j=; j<=target; ++j)//将(1+x^i)*(1+x^j)相乘展开,整理合并项
{
for(k=; k+j<=target; k=k+i) //只用保留指数<=n的项,所以k+j<=n
{
temp[j+k]=temp[j+k]+ sup[j]; //j指当前表达式里项的第j个项,k指后一个表达式里项的指数,k=k+i
}
}
for(j=; j<=target; ++j) // 将临时的结果覆盖当前结果,同时把临时结果置零,为下次做准备
{
sup[j] = temp[j];
temp[j] = ;
}
}
cout << sup[target] << endl; //输出结果
}
return ;
}

https://blog.csdn.net/bjrxyz/article/details/8123821

最新文章

  1. SQL SERVER 2014 各个版本支持的功能
  2. 初学SQL常用到的一些指令
  3. 【IOS】Xcode7以上免证书真机调试
  4. 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)
  5. web开发常用的js验证,利用正则表达式验证邮箱、手机、身份证等输入
  6. javascript笔记2-引用类型
  7. 使用Metasploit进行端口扫描
  8. Codeforces Round #363 (Div. 2)-&gt;B. One Bomb
  9. JavaScript设计模式之单例模式
  10. JS判断鼠标从哪个方向进入DIV容器
  11. java中如何计算两个时间段的月份差
  12. Spring定时器实现(二)
  13. 第2章KNN算法笔记_函数classify0
  14. vscode 创建.net core mvc
  15. entry.define编程思路
  16. Hive Tuning(一) 连接策略
  17. 利用MessageFormat实现短信模板的匹配
  18. addLoadEvent
  19. redhat6本地源NBD驱动安装
  20. UML类图—机房收费系统

热门文章

  1. Android WebView 捕捉点击的URL中的信息
  2. android opencv
  3. warning: control reaches end of non-void function 和 warning: implicit declaration of function &#39;rsgClearColor&#39; is invalid in C99
  4. 手动编译安装tmux
  5. UTF8转unicode说明
  6. 关于 block的一些浅识
  7. 1.初学c++,比较困惑的问题。
  8. LeetCode第136题:只出现一次的数字
  9. 20169219《linux内核原理与分析》第九周作业
  10. DropDownList 控件的SelectedIndexChanged事件触发不了