如何在SPOJ Feynman中应用动态编程?

问题描述 投票:1回答:2

我正在解决这个问题-> 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的初学者,无法弄清楚此问题如何包含子问题。查找复发关系的任何帮助或提示将非常有帮助。

c++ algorithm dynamic-programming divide-and-conquer
2个回答
1
投票

这只是一个愚蠢的DP。您在这里正在做的是

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

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

就是这样!您迭代到n,然后将答案存储在sumSquares [n]!

0
投票
只需使用简单的DP。如果您观察到图案,您会注意到,如果您占用1平方,则可以使64平方。如果采用2平方尺,则可以使(8-1)= 7 * 7 = 49平方尺。因此您可以遵循->(8 * 8)+(7 * 7)+ ........ +(1 * 1)

int feyn[1000]; long long Feynman(long long x) { if(x==1)return 1 ; feyn[x]= (x*x)+Feynman(x-1); return feyn[x]; }

© www.soinside.com 2019 - 2024. All rights reserved.