题目链接

#include<cstdio>
#include<algorithm>
using namespace std;
int dp[305][305]={},jojo[305][305];
int t,kk;
int a[305]; void DFS(int x,int y,int toto){ //x左标记,y为右标记,toto表示目前你回溯到的层次
if(x>=y) //左标记在右标记右边,自然不成立 (剪枝)
return ;
if(toto==kk){// 如果你回溯到了kk的层次,那么就可以输出啦!
printf("%d ",jojo[x][y]);
t=1; //确保下次还进循环;
return ;
}
DFS(x,jojo[x][y],toto+1);
DFS(jojo[x][y]+1,y,toto+1);
} int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
} for(int i=n-1;i>0;i--){
for(int j=i+1;j<=n;j++){
for(int k=i;k<j;k++){
if(dp[i][j]<dp[i][k]+dp[k+1][j]+(a[i]+a[j])*a[k]){
dp[i][j]=dp[i][k]+dp[k+1][j]+(a[i]+a[j])*a[k]; //合并时获得的价值就是 ( 1号金钥匙价值 +2号金钥匙价值)* 3号金钥匙价值。
jojo[i][j]=k; //标记,方便后来回溯找输出队列;
}
} }
}
printf("%d\n",dp[1][n]);
//开始回溯(开始吟唱!!!)
t=1; //确保进入循环
while(t){
t=0; //先将t的初值赋为0 ,如果找到了回溯的数,t就重新回1,如果t为零,那么回溯就完成了;
kk++;
DFS(1,n,1);
}
return 0;
}

最新文章

  1. 上个项目的一些反思 III
  2. mysql 定时任务
  3. 没想到cnblog也有月经贴,其实C#值不值钱不重要。
  4. TCP UDP 协议的区别和联系
  5. mybatis 入门二
  6. 一个功能齐全的IOS音乐播放器应用源码
  7. 递归小demo(1-100的和)
  8. swift 关于闭包和函数
  9. CRC32校验的用法
  10. PHP定义静态方法的原则
  11. 读书笔记 effective c++ Item 44 将与模板参数无关的代码抽离出来
  12. Mac os下安装brew
  13. 算法提高 拿糖果 线性DP
  14. Docker Demo on Docker
  15. Atlas实现MySQL大表部署读写分离
  16. C#复习笔记(5)--C#5:简化的异步编程(异步编程的深入分析)
  17. 今天讲座的感悟--java
  18. AngularJS中的transclusion案例
  19. CentOS 6和CentOS 7防火墙的关闭
  20. SpringBoot(十)_springboot集成Redis

热门文章

  1. shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符
  2. SPI总线 通俗易懂讲解——(转载)
  3. 2020-1-19 2.港股打新、REITs和分拆
  4. 简单读读源码 - dubbo多提供者(provider)配置方法
  5. 『动善时』JMeter基础 — 24、JMeter中使用“用户参数”实现参数化
  6. 【C++】禁用/启用笔记本键盘工具(含源码)
  7. GO语言面向对象08---投胎游戏
  8. C# 移除字符串头尾指定字符
  9. 怎样训练YOLOv3
  10. Kaggle上的犬种识别(ImageNet Dogs)