http://poj.org/problem?id=1651

题意:给出n个数字,每取中间一个数,就会使得权值加上中间这个数和两边的乘积,求取剩两个数最少的权值是多少。

思路:区间dp。

一开始想了挺久还是写不出方程,做了点别的事回来再想就突然觉得很简单了。

一开始使得长度为1和2的区间dp[i][j]为0.

然后dp[i][j] = min(dp[i][k] + dp[k][j] + w[k] * w[i] * w[j])。

枚举的k为中间拿掉的数,然后和左右的区间和相加就是最后答案了。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 105
typedef long long LL;
LL dp[N][N], w[N]; int main() {
int n;
while(~scanf("%d", &n)) {
memset(dp, 0x3f3f3f3f, sizeof(dp));
for(int i = ; i <= n; i++) scanf("%lld", &w[i]);
for(int i = ; i <= n; i++) dp[i][i] = dp[i][i+] = ;
//for(int i = 2; i < n; i++) dp[i][i] = w[i-1] * w[i] * w[i+1];
for(int len = ; len < n; len++) {
for(int i = ; i + len <= n; i++) {
int j = i + len;
for(int k = i + ; k < j; k++)
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + w[i] * w[j] * w[k]);
}
}
printf("%lld\n", dp[][n]);
}
return ;
}

最新文章

  1. ArrayList和Vector以及synchronizedList
  2. NPOI 添加行
  3. IT行业工作6年回顾
  4. Swift-10--错误处理
  5. js对象2--工厂模式的由来--杂志
  6. ORACLE解锁record is locked by another user
  7. STM32之外部中断控制
  8. 引用头文件顺序问题 error C2039
  9. 【原】使用Json作为Python和C#混合编程时对象转换的中间文件
  10. html+css实现小米商城首页静态页面
  11. 如何获得ios7系统中的蓝色
  12. 2016-2017-2 20155339 实验二《Java面向对象程序设计》实验报告
  13. 学习笔记----float后不与前面元素同行解决办法。
  14. Vim技能修炼教程(15) - 时间和日期相关函数
  15. 《JAVA多线程编程核心技术》 笔记:第四章、Lock的使用
  16. Python 优雅的操作字典
  17. VHDL基础 学习笔记
  18. httpmodule VS2012 和 VS2013
  19. 配置Struts2后运行jsp出现404的解决方法
  20. String和八种基本数据类型互相转换

热门文章

  1. XF相对控件布局
  2. JS 两种数组类型
  3. Redis进阶实践之十八 使用管道模式提高Redis查询的速度
  4. 教你干掉win10全家桶
  5. iOS-HTTP浅析
  6. SQLite Expert Professional 打开加密SQLite数据库
  7. 基于VUE实现的新闻后台管理系统-三
  8. hadoop(三)
  9. nodejs redis遇到的一个问题解决
  10. 每一位想有所成就的程序员都必须知道的15件事(走不一样的路,要去做,实践实践再实践,推销自己,关注市场)good