【发布时间】:2014-09-21 19:40:26
【问题描述】:
给定一个输入 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)。没有循环,没有递归,没有动态编程。很高兴发布推导的答案。
标签: c++ algorithm recursion dynamic-programming