美文网首页
动态规划——完美平方

动态规划——完美平方

作者: Myth52125 | 来源:发表于2017-09-02 00:06 被阅读0次

参考文章

http://www.cnblogs.com/pk28/p/5827338.html

题目

给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。

只需要输出最少的个数。

同时,还有一个定理:四方定理:所有自然数至多只要用四个数的平方和就可以表示。

该题可以使用动态规划来解:
给定的整数从1开始增大到n,然后使用一个一维数组来存储给定数需要的平方数的个数。

后一个状态与前一个状态的转换:

//n为给定,m为从1增长到n
//memo[]为备忘录
for(int i = 0; i*i <m; i++)
{
  memo[i]=min(memo[i], memo[m - i*i] + 1)
}

外部一个循环m从1到n,内部的状态转换公式为:
min内部的始终取值最小的,memo[m - i*i] +1 意思为:
+1表示的是 i*i这个平方数所占的一项。
剩下的个数为,之前求出的meme[m - i*i]。

从1到最大的平方数,挨个减尝试,存储最小值。

变形

这个问题可以转换为判断一个数是几个平方数的和。

bool isOne(int n)
{
  int a= sqrt(n);
  return n == a*a;
}

bool isTwo(int n)
{
for(int i = 0; i*i < n;i++)
{
  if(isOne(n - i*i))
  {return true ;}
}
return false;
}

bool isThree(int n)
{
 for(int i = 0; i*i < n ;i++)
  {
    if(isTwo(n  - i*i ))
    {return true;}
  }
  return false;
}

在使用的时候以此从1到3开始调用函数判断。

相关文章

  • 动态规划——完美平方

    参考文章 http://www.cnblogs.com/pk28/p/5827338.html 题目 给一个正整数...

  • 完美平方问题(279)——动态规划

    概述 给出一个正整数n,把n拆成几个数的平方和,求最少可以拆成几个数。例如:n=12, 返回3,因为12=2^2+...

  • leetcode第279题:完全平方数 [中等]

    题目描述 考点 动态规划 广度优先搜索 解题思路一:动态规划 状态定义:dp[i]表示数字i最少可以由几个完全平方...

  • 279. 完全平方数

    279. 完全平方数 1.思路 1.1动态规划: 这个题很容易就想到了动态规划.每次F[n]=min{F[i]+F...

  • Algorithm进阶计划 -- 动态规划(上)

    动态规划动态规划的基本原理动态规划的运用 1. 动态规划的基本原理 动态规划(Dynamic Programmi...

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 《数据结构与算法之美》27——初识动态规划

    前言 今天开始学习动态规划,一共有三节,分别是:初识动态规划、动态规划理论、动态规划实战。今天这一节就是初识动态规...

  • 算法3:动态规划

    5.动态规划5.1 什么是动态规划?5.2 自底向上的动态规划:5.3 自顶向下的动态规划5.4 0-1背包问题:...

  • 动态规划

    动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...

网友评论

      本文标题:动态规划——完美平方

      本文链接:https://www.haomeiwen.com/subject/pblljxtx.html