题意:

这道题也是在不改变原序列每个元素位置的前提下,看每个元素与他身边的两个元素那个先结合能得到最大的能量

题解:

很明显这是一道区间dp的题目,这道题要断环成链,这道题需要考虑在这个区间上某个元素先与那个元素结合更好,而如果我们采用了区间dp的模板,那么我们就在dp中不用考虑某个元素先于左右那个结合,因为区间dp的模板已经做到了这一点

i是起点,j是终点,k就是枚举父区间是由哪两个子区间合并而成的

dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+v[i]*v[k+1]*v[j+1])

但是最后的结果要在dp过程中取最大值,因为我们dp的最终长度是n,但是这个起点位置不是确定的,所以我们要用一个变量来取最大值

代码:

 1 #include<cstdio>
2 #include<cstring>
3 #include<iostream>
4 #include<algorithm>
5 #include<vector>
6 #include<queue>
7 using namespace std;
8 typedef long long ll;
9 const int maxn=2005;
10 const int INF=0x3f3f3f3f;
11 int dp[maxn][maxn],v[maxn],w[maxn];
12 int main()
13 {
14 int n;
15 scanf("%d",&n);
16 for(int i=1;i<=n;++i)
17 {
18 scanf("%d",&v[i]);
19 v[n+i]=v[i];
20 }
21 v[2*n+1]=v[1];
22 int maxx=0;
23 for(int i=2;i<=n;++i)
24 {
25 for(int j=1;j+i<=2*n+1;++j)
26 {
27 int ends=j+i-1;
28 for(int k=j;k<ends;++k)
29 {
30 dp[j][ends]=max(dp[j][ends],dp[j][k]+dp[k+1][ends]+v[j]*v[k+1]*v[ends+1]);
31 }
32 maxx=max(maxx,dp[j][ends]);
33 }
34 }
35 printf("%d\n",maxx);
36 return 0;
37 }

最新文章

  1. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
  2. FWaaS 实践: 允许 ssh - 每天5分钟玩转 OpenStack(119)
  3. 实验一 认识DOS
  4. (分享)多功能 PDF转换器v3.0版本
  5. 在PHP中使用CURL
  6. 记一次MySql入库后,文本出现乱码的问题
  7. 跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
  8. iOS开发——数据持久化Swift篇&amp;iCloud云存储
  9. ios 免书籍入门站点
  10. hdu 3074 Multiply game(模板级线段树)
  11. 简单的setInterval应用
  12. 浅析ConcurrentHashMap
  13. Java编程代码性能优化总结
  14. 高斯消元与行列式求值 part1
  15. Kasaraju算法--强连通图遍历及其python实现
  16. c/c++ 标准容器 vector的内存空间是如何自动增长的
  17. KubeCon CloudNativeCon China 2019
  18. [转帖]Linux 的静态库与动态库
  19. The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path 解决办法
  20. WebLogic使用总结(七)——WebLogic部署Web应用并绑定域名

热门文章

  1. LeetCode662 二叉树最大宽度
  2. 机器学习算法&#183;KNN
  3. Java远程下载文件到本地(http协议和ssh2协议)
  4. Java Mybatis快速入门之基本使用
  5. LeetCode993. 二叉树的堂兄弟节点
  6. [Usaco2008 Open]Roads Around The Farm分岔路口
  7. 1.5V转3V电源芯片,1.5V转3V稳压芯片
  8. vue2.0、vue3.0不同之处
  9. Linux更换软件源
  10. TCP为什么要三次握手与四次分手?