zoukankan      html  css  js  c++  java
  • 279. Perfect Squares(动态规划)

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

    Example 1:

    Input: n = 12
    Output: 3 
    Explanation: 12 = 4 + 4 + 4.

    Example 2:

    Input: n = 13
    Output: 2
    Explanation: 13 = 4 + 9.




    dp[0] = 0
    dp[1] = dp[0]+1 = 1
    dp[2] = dp[1]+1 = 2
    dp[3] = dp[2]+1 = 3
    dp[4] = Min{ dp[4-1*1]+1, dp[4-2*2]+1 } = Min{ dp[3]+1, dp[0]+1 } = 1
    dp[5] = Min{ dp[5-1*1]+1, dp[5-2*2]+1 } = Min{ dp[4]+1, dp[1]+1 } = 2
    .
    .
    .
    dp[13] = Min{ dp[13-1*1]+1, dp[13-2*2]+1, dp[13-3*3]+1 } = Min{ dp[12]+1, dp[9]+1, dp[4]+1 } = 2
    .
    .
    .
    dp[n] = Min{ dp[n - i*i] + 1 }, n - i*i >=0 && i >= 1



     1 class Solution {
     2 public:
     3     int numSquares(int n) {
     4         vector<int> dp(n+1,0);
     5         for(int i = 1;i<=n;i++){
     6             
     7             int mins = INT_MAX;
     8             for(int j = 1;i-j*j>=0;j++){
     9                 mins = min(mins,dp[i-j*j]+1);
    10             }
    11             dp[i] = mins;
    12         }
    13         return dp[n];
    14     }
    15 };
     
  • 相关阅读:
    洛谷
    洛谷
    洛谷
    51nod
    洛谷
    洛谷
    51nod
    洛谷
    2019五一训练记录
    2019.5.4备战省赛组队训练赛第十九场
  • 原文地址:https://www.cnblogs.com/zle1992/p/10447564.html
Copyright © 2011-2022 走看看