题目描述

乘法游戏是在一行牌上进行的。每一张牌包括了一个正整数。在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌。最后一次移动后,这里只剩下两张牌。
你的目标是使得分的和最小。

解析

区间dp
定义dp[i][j]是把i j 之间所有数去掉的代价最小值
那么显然:

if(j==i+1) return 0;

而当ij中有数时,我们可以枚举i j之间取的最后一个数的位置k
显然: i<k<j
那么这个过程就是把i k之间的书都取完再把k j之间的数取完,最后取k(代价是a[k]*a[i]*a[j])
那么转移方程就是:

dp[i][j]=min(dp[i][j],dfs(i,k)+dfs(k,j)+a[i]*a[j]*a[k]);

枚举k的位置取min即可
注意要使用记忆化搜索优化时间复杂度

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=150;
int m,n;
int dp[N][N],a[N];
int dfs(int i,int j){if(dp[i][j]) return dp[i][j];if(j==i+1) return 0;dp[i][j]=2e9;for(int k=i+1;k<j;k++){dp[i][j]=min(dp[i][j],dfs(i,k)+dfs(k,j)+a[i]*a[j]*a[k]);}return dp[i][j];
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);printf("%d",dfs(1,n));
}
/*
6
10 1 50 50 20 5
*/

法2

递推
思路是类似的,从小到大枚举区间长度以保证
用到的dp都已更新完即可
时间复杂度n^3

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=150;
int m,n;
int dp[N][N],a[N];
int main(){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int l=3;l<=n;l++){for(int i=1;i+l-1<=n;i++){int j=i+l-1;dp[i][j]=2e9;for(int k=i+1;k<j;k++){dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[k]*a[i]*a[j]);}}}printf("%d",dp[1][n]);
}
/*
6
10 1 50 50 20 5
*/

thanks for reading!

不止代码:乘法游戏 题解(区间dp)相关推荐

  1. qscoj 喵哈哈村的打印机游戏(区间dp)

    题目链接:http://www.qscoj.cn/problem/54/ 喵哈哈村的打印机游戏 发布时间: 2017年3月21日 20:00 最后更新: 2017年3月21日 20:02 时间限制: ...

  2. 喵哈哈村的打印机游戏(区间DP)

    喵哈哈村的打印机游戏 发布时间: 2017年3月21日 20:00   最后更新: 2017年3月21日 20:02   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村的月亮同学很 ...

  3. 数字游戏(区间dp)

    丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分 ...

  4. 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★

    P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...

  5. luogu4677山区建小学题解--区间DP

    题目链接 https://www.luogu.org/problemnew/show/P4677 分析 这道题方法跟之前题不一样,我们相当于枚举一个左右端点来线性扩展,同时划分断点进行决策 \(f[i ...

  6. 计蒜客 卡牌游戏 (区间DP)

    /* dp[i][j]表示i-j的牌都被取走后分数的最小值. */#include <bits/stdc++.h>using namespace std;#define inf 0x3f3 ...

  7. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  8. 挑战2.7.3 Round 1C 2009 C. Bribe the Prisoners 区间dp

    题目链接: https://code.google.com/codejam/contest/189252/dashboard#s=p2 题意: 题解: 区间dp dp[i][j] 表示释放a[i]~a ...

  9. 【AtCoder - 4244 】AtCoder Express 2 (区间dp 或 暴力枚举,思维)

    题干: In Takahashi Kingdom, there is a east-west railroad and N cities along it, numbered 1, 2, 3, ... ...

最新文章

  1. 开源BTS产品中存在多处漏洞,攻击者或可劫持手机通讯基站
  2. scala简单学习---1
  3. 用python实现计算器功能_使用python实现计算器功能
  4. 「安全技术」针对常见混淆技术的反制措施
  5. oracle11g memory_target,Oracle11g启动报:ORA-00845: MEMORY_TARGET not supported on this system
  6. SpringBoot2.1.5(13)--- SpringBoot 特性下
  7. 电脑控制iphone_用iPhone别再傻傻地直接盯屏幕,按下这个按钮,屏幕放大10倍不止...
  8. 在Android Studio中使用Method trace,查看某进程的所有线程trace的方法
  9. 机器学习笔记(三十):基尼系数、CART
  10. Micro Sip 配置自己的freeswitch服务器地址
  11. html5饼图的制作方法,excel2010复合饼图制作方法
  12. php 模拟蜘蛛,php 实现使用curl模拟百度蜘蛛进行采集
  13. T216909 小卡与质数2 (前缀和 欧拉筛
  14. 值得珍藏!生生世世受用的译文 《心经》
  15. R语言XLSX数据导入
  16. 2022年浙江省中职组“网络空间安全”编码信息获取
  17. Java在线打开编辑PPT文档
  18. 不做etl sql 怎么直接取_不管茄子怎么做,直接下锅是大错!多加1步,茄子更入味,不变色...
  19. TyoeScript
  20. 从 0 到 1 学习 elasticsearch

热门文章

  1. gamaredon_Gamaredon组织某样本分析
  2. java gui 移动_JavaGUI如图:当鼠标按left按钮,右边的字会移动到左边按 爱问知识人...
  3. ant 改变表格数据_表格技巧—Excel表格怎么替换数字
  4. java虚拟机工作原理图_Java虚拟机工作原理
  5. 将span隐藏的函数_分类汇总函数Subtotal和Aggregate应用技巧解读
  6. js-cookie 无法设置cookie_php操作 cookie
  7. java面试题_阿里大厂流出的数百道 Java 经典面试题
  8. AcWing 756. 蛇形矩阵
  9. 给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)
  10. Round Numbers POJ - 3252(数位dp+判断前导零)