給定輸入n
,找到所有可能的數字組合1 ... n
的總和。 例如,如果n=3
,那麼所有可能的組合是遞歸解決方案的動態編程解決方案
(1),(2),(3),(1,2),(1,3),(2,3),(1,2,3)
和它們的總和是
1 + 2 + 3 + (1+2) + (1+3) + (2+3) + (1+2+3) =24
我能解決使用recursion
這個問題。我如何使用Dynamic Programming
來解決這個問題?
#include<iostream>
using namespace std;
int sum=0,n;
int f(int pos,int s)
{
if(pos>n)
{
return 0;
}
else
{
for(int i=pos+1;i<=n;++i)
{
sum+=s+i;
f(i,s+i);
}
}
}
int main()
{
cin>>n;
sum=0;
f(0,0);
cout<<sum<<'\n';
}
}
編輯 雖然這個問題可以在固定的時間使用該series來解決。
但我想知道如何使用Dynamic Programming
來完成這項工作,因爲我對此很虛弱。
或者你可以用分析方法計算它:'n *(n + 1)* 2 **(n-2)'。沒有循環,沒有遞歸,沒有動態編程。很高興通過派生髮布答案。 – NPE 2014-09-21 19:48:30