解题思路:采取递归+深搜思想,将所有可能的结果都整一遍,选出最大值
注意事项:
参考代码:
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
struct beads//能量珠结构体
{
int x;
int y;
};
int dfs(beads a[],int n,int pre) {//能量珠数组 能量珠数 前面结合的能量珠释放的能量
if (n == 1) { //
// cout << "pre: " << pre << endl;
return pre;
}
int r = 0;
for (int i = 0; i < n; i++) {
int max1 = 0;
max1 += a[i].x * a[i].y * a[(i + 1) % n].y + pre;//计算释放的能量
beads* a1 = new beads[n - 1];//构建一个新数组存结合后的能量珠串
a1[0].x = a[i].x;
a1[0].y = a[(i + 1) % n].y;
int pos = 1;
int j = (i+2)%n;
while (pos < n-1) {
if (j != i && j != (i + 1) % n) {
a1[pos].x = a[j].x;
a1[pos++].y = a[j].y;
}
j = (j+1)%n;
}
max1 = dfs(a1, n - 1,max1);
r = max(r, max1);
}
return r;
}
int main()
{
int n;
cin >> n;
int* array = new int[n];
for (int i = 0; i < n; i++) {
cin >> array[i];
}
beads* a = new beads[n];
for (int i = 0; i < n; i++) {
a[i].x = array[i];
a[i].y = array[(i + 1) % n];
}
//cout << "+++++++++++++++++++++++++++++++" << endl;
cout << dfs(a, n,0);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复