平方数pascal问题,求大神【问题描述】珍珍学习乘法时,发现4=2*2,9=3*3,…,而2不可能分解为二个相同整数的乘积,但可以分解为1*1+1*1.她想知道对任意的正整数n,把它分解为几个整数与自身相乘之

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 22:05:04
平方数pascal问题,求大神【问题描述】珍珍学习乘法时,发现4=2*2,9=3*3,…,而2不可能分解为二个相同整数的乘积,但可以分解为1*1+1*1.她想知道对任意的正整数n,把它分解为几个整数与

平方数pascal问题,求大神【问题描述】珍珍学习乘法时,发现4=2*2,9=3*3,…,而2不可能分解为二个相同整数的乘积,但可以分解为1*1+1*1.她想知道对任意的正整数n,把它分解为几个整数与自身相乘之
平方数pascal问题,求大神

【问题描述】

珍珍学习乘法时,发现4=2*2,9=3*3,…,而2不可能分解为二个相同整数的乘积,但可以分解为1*1+1*1.她想知道对任意的正整数n,把它分解为几个整数与自身相乘之和,有多少种方案呢?

【输入】输入文件square.in只有一行,该行只有一个正整数n.

【输出】输出文件square.out只有一行,该行只有一个正整数,表示总方案数.





 


 
   
   
   

【样例输入1】


   

4


   

【样例输出1】


   

2


   
   
 
 


 
 


 
   
   
   

【样例输入2】


   

13


   

【样例输出2】


   

6


   
   
 
 


  

 

 

 


【样例说明】

4有2种分解方案,它们是:4=1*1+1*1+1*1+1*1=2*2

13有6种分解方案,它们是:

13=1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1

       =1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+2*2

        =1*1+1*1+1*1+1*1+1*1+2*2+2*2

        =1*1+1*1+1*1+1*1+3*3

        =1*1+2*2+2*2+2*2

        =2*2+3*3

【数据限制】30%的数据,1≤n≤10; 80%的数据,1≤n≤300;100%的数据,1≤n≤800.


平方数pascal问题,求大神【问题描述】珍珍学习乘法时,发现4=2*2,9=3*3,…,而2不可能分解为二个相同整数的乘积,但可以分解为1*1+1*1.她想知道对任意的正整数n,把它分解为几个整数与自身相乘之
这道题显然是DP(不知道DP?它就是大名鼎鼎的动态规划!^_^)
楼上的算法思路是没错,但是太慢了,对于NOI严格的时间限制显然是不行的,所以我提出了更快的算法(对拍过了,绝对没有错误)
思路:一开始我直接用一维,发现不能很好处理重复,所以我采用升维的方法
设f[i,j]为对于整数i,组成它的最后一个(也就是最大的)相同整数,那么显然对于f[i],我们可以取1~根号(i)最为他的最后一项,那么也就是说,假设取了j为他的最后一个相同整数,则可知除了这个相同整数,其他相同的整数的和就是i-j^2,同时这些相同整数的和,他的最后一个相同整数不能超过j,否则就会出现比最后一个大的情况,不符合我们之前的假设,所以对于f[i,j],它是由f[i-j*j,1],f[i-j*j,2]……f[i-j*j,j]这些组成的,那么思路就很清楚了.总的算法时间复杂度平摊得O(N^2),对于本题绰绰有余.
代码:
var
f:array[0..300,0..300] of longint;
i,j,n,k,ans:longint;
begin
readln(n);
f[0,0]:=1;
for i:=1 to n do
for j:=1 to trunc(sqrt(i)) do//n^1.5次方个状态
for k:=0 to j do//状态转移
f[i,j]:=f[i,j]+f[i-sqr(j),k];//动态规划
for i:=1 to trunc(sqrt(n)) do
ans:=ans+f[n,i];//注意这里要把所有符合的都加进来,否则会遗漏
writeln(ans);
end.
不懂再追问,好的话一定要采纳啊!

平方数pascal问题,求大神【问题描述】珍珍学习乘法时,发现4=2*2,9=3*3,…,而2不可能分解为二个相同整数的乘积,但可以分解为1*1+1*1.她想知道对任意的正整数n,把它分解为几个整数与自身相乘之 求大神,高数二元函数问题. 高数问题!急求大神! 高数行列式问题,求大神帮忙 高数问题,求大神指导 pascal语言编程问题(free pascal求1—N中的素数的个数.(1 高数问题求解大神 求PASCAL背包问题和无限背包思路和程序 回形矩阵 pascal[问题描述] 从键盘输入正整数n,i,j,( l 工 作(work.pas) pascal【问题描述】当前有n(n 关于c++的问题 完全平方数求大神帮助c++中怎样判定一个数是否为完全平方数? 高数,极限问题,求大神解答...求解. 高数极限问题,求大神解惑,万分感谢! PASCAL 老鼠走迷宫问题 求下面问题的pascal程序,第二题要用冒泡排序第一题 小兔子数(rabbit)问题描述设S(N)表示N的各位数字之和,如S(484)=4+8+4=16,S(22)=2+2=4.如果一个正整数满足S(x * x)= S(x) * S(x),我们称之为Rabbit Number. pascal判断三角形的问题输入三角形的3个边长,判断他是直角三角形,等边三角形,等腰三角形,还是普通的三角形?请问我哪里错了?求大神指教. 求pascal问题 把整数分开,这两个数的和的平方有等于原数把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)二次方=3025计算结果又等于原数.求所有符合这样条件的四位数 数学问题求大神解答!