题目连接:http://poj.org/problem?id=1651

题意:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积。直到只剩下首尾两个数为止。问最小得分?

分析:区间dp,记忆化搜索,dp[l][r]表示去掉l~r中所有数(不包括l、r)后得到的最小值,那么当前区间最小值为dp[l][r]=min(dp[l][r],dp[l][i]+dp[i][r]+a[l]*a[r]*a[i]).

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-9
#define N 100010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int a[110],dp[110][110];
int dfs(int l,int r)
{if(dp[l][r]!=-1)return dp[l][r];if(r-l<2)return 0;int temp=inf;for(int i=l+1;i<r;i++)temp=min(dfs(l,i)+dfs(i,r)+a[i]*a[l]*a[r],temp);return dp[l][r]=temp;
}
int main()
{int n;while(scanf("%d",&n)>0){for(int i=1;i<=n;i++)scanf("%d",&a[i]);FILL(dp,-1);printf("%d\n",dfs(1,n));}
}

View Code

转载于:https://www.cnblogs.com/lienus/p/4266026.html

poj1651(区间dp)相关推荐

  1. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  2. 动态规划 —— 区间 DP

    [概述] 区间型动态规划,又称为合并类动态规划,是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的区间中哪些元素合并而来有很大的关系. [思想] 区间 DP 实质上就是 ...

  3. 区间dp入门——总结+习题+解析

    前天学长拉了个区间dp的专题,花了两个做,今天就来做个总结吧!!! 区间dp其实就是一种建立在线性结构上的对区间的动态规划,dp本来就是很奇妙的东西,也没有什么套路,就是一种思考的数学思维方式,只有做 ...

  4. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  5. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  6. UVA10003 切木棍 Cutting Sticks(区间DP、细节)

    整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...

  7. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

  8. 【每日DP】day13、P3147 [USACO16OPEN]262144 (区间DP,2048游戏)难度⭐⭐⭐★

    P3147 [USACO16OPEN]262144 P 想到合并,自然就想到区间dp,一个被合成的数之前是一个区间,并且由两个数比它小 111 的区间合成.可麻烦的是,我们并不知道之前的两个区间长度各 ...

  9. HDU 5115 Dire Wolf ——(区间DP)

    比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: 1 #i ...

最新文章

  1. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)...
  2. ExtJS4 API文档阅读(四)——Data
  3. 记录程序人生2020.8.11
  4. 具有GlassFish和一致性的高性能JPA –第1部分
  5. MyEclipse创建struts.xml
  6. python 安装包列表导出到 txt
  7. 连载IT小说《失业的程序员》讲述一个Android开发者的奋斗史
  8. jtag接口定义 jtag接口的主要作用是什么
  9. java rgb565转rgb888_RGB565 转RGB888的循环补偿(zz)
  10. PPT 图表不显示对应类型的数据解决办法
  11. 阿里云部署Java网站和微信开发调试心得技巧(下)
  12. Android 系统应用开发实战
  13. 总算编译通过了《自制编程语言》一书里的代码!
  14. 嵌入式linux下sqlite应用
  15. Java API VIII
  16. 【C++】String用法总结
  17. 2023 年软件文档工具,这5款可以看看!
  18. GPS卫星位置的计算
  19. blob类型url的视频下载问题
  20. php 井字棋,怎样用JS做出井字棋游戏

热门文章

  1. Oracle 9i DBA Fundamentals I 学习笔记(三)
  2. 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate...
  3. 【程序员趣味】用Python制作带字小人举牌
  4. linux时间轮算法,关于时间轮的设计 linux hashed Hierarchical timing wheel
  5. Python正则表达式初识(二)
  6. centos 找不到php.ini,centos找不到php.ini文件
  7. mupdf不支持x64_ARM版Win10用户狂喜 微软全新补丁让应用不再不兼容
  8. 如何清空DNS缓存Windowslinux
  9. 关于学习Python的一点学习总结(19->if及相关的符号运算)
  10. poj2367拓扑排序模版题