【发布时间】:2015-06-25 07:45:03
【问题描述】:
问题链接:
https://www.hackerearth.com/problem/algorithm/divide-to-three-33/description/
我能够使用动态编程来解决它。 https://www.hackerearth.com/submission/1720148/
谁能解释一下编辑解决方案(递归)。
编辑解决方案:
#include<cstdio>
#include<cstdio>
#include<queue>
#include<cstring>
#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
#include<fstream>
#include<sstream>
using namespace std;
typedef long long int int64;
int64 n,a[40],ans,vl;
void fn(int64 i,int64 j,int64 k,int64 ptr){
if(ptr==n){
vl = max(max(i,j),k);if(vl<ans)ans=vl;
}
else{
fn(i+a[ptr],j,k,ptr+1);
fn(i,j+a[ptr],k,ptr+1);
fn(i,j,k+a[ptr],ptr+1);
}
}
int main(){
//freopen("in3.txt","r",stdin);
//freopen("out3.txt","w",stdout);
int64 i,j,k,l,m,t,vl,fl;ans=1000000;
cin>>n;for(i=0;i<n;i++)cin>>a[i];
fn(0,0,0,0);
printf("%lld\n",ans);
return 0;
}
谢谢,
【问题讨论】:
-
我不明白为什么这个问题是-2。我已经努力使用动态编程来解决这个问题。我无法理解递归解决方案。我想理解它,因为它非常接近代码。
-
@Marco Bonelli ...已编辑问题
标签: c++ arrays recursion dynamic-programming partition