c++ - 如何在 SPOJ Feynman 中应用动态规划?

标签 c++ algorithm dynamic-programming divide-and-conquer

我正在解决这个问题 -> http://www.spoj.com/problems/SAMER08F/ (一个非常简单的问题)......我第一次去就得到了 AC......我的解决方案是这样的(非常简单):

#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
    while(n!=0)
    {
    printf("%d",((n)*(n+1)*((2*n)+1))/6);
    printf("\n");
    scanf("%d",&n);
    }
    return 0;
}

我正在查看此列表 http://ahmed-aly.com/Category.jsp?ID=33我发现 Feynman 被列为 DP 问题......我是 DP 的初学者,无法弄清楚这个问题如何由子问题组成。寻找递归关系的任何帮助或提示都将非常有帮助。

最佳答案

这只是一个愚蠢的 DP。
你在这里做的是 formula对吧?
相反,你可以做的是创建一个数组来保存平方和(我们称之为 sumSquares)。现在,这就是您填充数组的方式:

  1. 总和[0] = 0; (基本情况,第一个的平方和 零元素为零)。

  2. sumSquares[i] = sumSquares[i - 1] + formula (平方和 i 个元素的平方和是 (i - 1) 个元素的平方 + 个元素的平方和 元素)

就是这样!你迭代到 n,你的答案存储在 sumSquares[n] 中!

关于c++ - 如何在 SPOJ Feynman 中应用动态规划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117855/

相关文章:

c++ - 查找指定起始位置的字符或子字符串

c++ - 如何获取 OpenSSL BIO_do_connect() 失败原因?

c++ - 内存池/内存分配器的正确布局? (哪个算法)

algorithm - 生成从 1 到 n 的随机数字列表的算法的正确性

algorithm - DP 左上角与右下角表格填充。什么时候使用哪个?

java - 斐波那契修改 :How to fix this algorithm?

c++ - 为什么必须在第一行设置 _GLIBCXX_DEBUG?

c++ - 'windows.h',其他平台呢?

python - itertools 掷骰子 : doubles roll twice

python - 断字问题 - 创建数组/矩阵后如何继续?