解题思路:采取递归+深搜思想,将所有可能的结果都整一遍,选出最大值
注意事项:
参考代码:
#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语言代码)浏览:530 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1071 |
上车人数 (C语言代码)浏览:816 |
数组输出 (C语言代码)--此题的题目描述有问题浏览:1843 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:636 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:583 |
循环入门练习5 (C语言代码)浏览:907 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:692 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |