您的位置:首页 > Web前端

动态规划中级教程 279. Perfect Squares

2017-08-07 16:07 148 查看
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
.

我们知道这个一眼可以看到

dp【8】=dp【4】+1(因为8-4)也是一个完全平方数

我们这里直接列状态转移方程

dp【i】=min(dp【i】,dp【i-j*j】)class Solution {
public:
int numSquares(int n) {
if(n<=0)return 0;
int num=sqrt(n);
int dp[n+1];
memset(dp,0,sizeof(dp));
for(int i=1;i<=num;i++)
{
dp[i*i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=num;j++)
{
if(i-j*j>0)
{
if(dp[i-j*j])
{
if(dp[i]==0)
{
dp[i]=dp[i-j*j]+1;
}
else
{
dp[i]=min(dp[i],dp[i-j*j]+1);
}
}
}
}
}
return dp
;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息