最短描述数,10的最短描述数是3^2+1^2所以是2,求一个数的最短描述数
# 平方个描述次数 # 5=2^2+1^2 # 3=1^2+1^2+1^2 def pingfanghe_miaoshu(s): f = [i for i in range(s+1)] for i in range(s): j = 1 while j*j <= i: f[i] = min(f[i], f[i-j*j]+1) j += 1 return f num = raw_input() res = pingfanghe_miaoshu(int(num)+1) print(res[-2])
(动态规划)
令表示通过平方数组成所需要的最少数量。
则,,其中。
即为最终答案。
class Solution { public: int numSquares(int n) { vector<int> f(n + 1, n); f[0] = 0; for (int i = 1; i <= n; i++) for (int j = 1; j * j <= i; j++) f[i] = min(f[i], f[i - j * j] + 1); return f[n]; } };
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题