Perfect Squares——动态规划
来源:互联网 发布:轻松装团购 知乎 编辑:程序博客网 时间:2024/05/22 14:11
问题描述
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...
) which sum to n.
For example, given n = 12
, return 3
because 12 = 4 + 4 + 4
; given n = 13
, return 2
because 13 = 4 + 9
.
算法分析
考虑Sum = a + b + c + d
,a,b,c,d均是perfect square number,用F[Sum]
表示最小numbers
,即F[Sum] =3
。
1、对于b + c + d,F[Sum-a] + 1 = F[Sum]
,同样F[c+d] + 1 = F[b+c+d]
,F[d] + 1 = F[c+d]
。
2、从1可以看出这就是动态规划的思想,定义状态F[N]
,状态转移方程为:F[N] = min(F[Sum-i^2]+1) ( i=1,2,3...N^(1/2) )
。
3、返回的F[N]即为the least number of perfect square numbers。
C++实现
int numSquares(int n) { if (n <= 0) return 0; // cntPerfectSquares[i]表示和为i的Perfect Squares. 从i=1开始计算,动态规划的思想计算所有子解 static vector<int> cntPerfectSquares({0}); // 计算cntPerfectSquares[i]知道i = n,即cntPerfectSquares.size() == n+1 while (cntPerfectSquares.size() <= n) { int m = cntPerfectSquares.size(); int cntSquares = INT_MAX; for (int i = 1; i*i <= m; i++) cntSquares = min(cntSquares, cntPerfectSquares[m - i*i] + 1); cntPerfectSquares.push_back(cntSquares); } return cntPerfectSquares[n]; }
阅读全文
0 0
- Perfect Squares——动态规划
- LeetCode Perfect Squares(动态规划)
- 动态规划-279. Perfect Squares
- 动态规划中级教程 279. Perfect Squares
- LeetCode 279. Perfect Squares--动态规划
- leetcode 279. Perfect Squares-完美平方数|动态规划
- LeetCode——Perfect Squares
- LeetCode279——Perfect Squares
- Algorithms—279.Perfect Squares
- 算法系列——Perfect Squares
- LeetCode学习篇十三——Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- JVM读书笔记之GC算法
- C语言基础练习2
- Android 签名详解
- 运维面试问答
- bzoj 4480: [Jsoi2013]快乐的jyy
- Perfect Squares——动态规划
- 高盛为什么认为中国AI领域将超越美国?
- numpy.transpose()
- React笔记汇总(二)
- (4)Fragment家族常用的API
- Form 回车提交查询与提交查询
- Android干货 看这里 点我秒领取
- [FAQ17853]M上默认接入点apn显示
- 4480: [Jsoi2013]快乐的jyy