题目不难,深度优先搜索。代码是参考别人写的。
题目链接:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2510
#include <iostream>
using namespace std;
int a[50], vist[55], n;
int sum = 0;
int MAXN = 0;
void dfs(int cur, int maxn)
{
int i;
if(cur == n)
{
if((sum - maxn)*maxn>(sum - MAXN)*MAXN)
{
MAXN = maxn;
return;
}
}
else
{
for(i = cur; i < n; i++)
{
if(!vist[i])
{
vist[i] = 1;
dfs(i+1,maxn + a[i]);
vist[i] = 0;
}
}
}
}
int main()
{
int i;
while(cin>>n)
{
memset(vist,0,sizeof(vist));
sum = 0;
for(i = 0; i < n; i++)
{
cin>>a[i];
sum += a[i];
}
MAXN = 0;
dfs(0, 0);
cout<<(sum-MAXN)*MAXN<<endl;
}
return 0;
}
本文通过一个具体的ACM竞赛题目,展示了如何使用深度优先搜索(DFS)算法来找到最优解。通过递归的方式尝试所有可能的选择,最终确定最佳路径。文章提供了完整的C++实现代码,并对关键步骤进行了说明。
358

被折叠的 条评论
为什么被折叠?



