博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求用1g、2g、3g的砝码(每种砝码有无穷多个)称出10g的方案有几种
阅读量:5069 次
发布时间:2019-06-12

本文共 1385 字,大约阅读时间需要 4 分钟。

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

 

转载于:https://www.cnblogs.com/-citywall123/p/9911583.html

你可能感兴趣的文章
Java基础03 构造器与方法重载
查看>>
kafka的使用
查看>>
编写Nginx启停服务脚本
查看>>
这些老外的开源技术养活了很多国产软件
查看>>
看图软件推荐
查看>>
安全测试的一些漏洞和测试方法
查看>>
spring框架学习笔记(八)
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
Linux中的SELinux详解--16
查看>>
php变量什么情况下加大括号{}
查看>>
less入门
查看>>
如何实现手游app瘦身?
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>
C# Linq获取两个List或数组的差集交集
查看>>
21.Longest Palindromic Substring(最长回文子串)
查看>>
HDU 4635 Strongly connected
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>