标签:.com 图片 info mic 完全 等于 需要 搜索 color
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...
)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
思路1:BFS
相当于找一条步数最短的路径,使得权重和等于n
思路2:trick
利用四平方和定理:任意一个正整数都能表示成不超过4个整数的平方和。其推论就是:如果一个正整数可以表示成4个整数的平方和,那么也可以表示为。
综上,问题的答案只有1,2,3,4。先通过推论判断是不是4,再看能不能由1或2个整数的平方和表示,不能的话就返回3.
这里判断能不能由1或2个整数的平方和表示,就是暴力搜索啦,这种写法蛮简洁的
int a = 0; while(a*a <= n){ int b = sqrt(n - a*a); if(a*a + b*b == n){ if(a == 0 || b == 0) return 1; else return 2; } a++; }
标签:.com 图片 info mic 完全 等于 需要 搜索 color
原文地址:https://www.cnblogs.com/fanmu/p/10704210.html