POJ1651 Multiplication Puzzle【区间DP】
每次删除一个数,代价是左右两边相邻的数的当前数的积
第一个和最后一个数不能删除
问最后只剩下第一个数的最后一个数的最小代价
思路
很简单的DP
正着考虑没有办法确定两边的数
那么就把每个区间内最后一次删除的数枚举出来,就可以确定左右两边的点是什么了
感觉挺对的
\(dp_{i,j}\)表示还有区间\([i,j]\)全部删完的最小代价,枚举一下最后删除的数然后直接统计贡献就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int N = 1e2 + 10;
ll dp[N][N];
int n, a[N];
int main() {
#ifdef dream_maker
freopen("input.txt", "r", stdin);
#endif
memset(dp, 0x3f, sizeof(dp));
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 2; i < n; i++) dp[i][i] = a[i - 1] * a[i] * a[i + 1];
for (int len = 2; len <= n - 2; len++) {
for (int l = 2, r; (r = l + len - 1) < n; l++) {
dp[l][r] = min(dp[l][r], a[l] * a[l - 1] * a[r + 1] + dp[l + 1][r]);
dp[l][r] = min(dp[l][r], a[r] * a[l - 1] * a[r + 1] + dp[l][r - 1]);
for (int k = l + 1; k < r; k++)
dp[l][r] = min(dp[l][r], dp[l][k - 1] + a[k] * a[l - 1] * a[r + 1] + dp[k + 1][r]);
}
}
printf("%lld", dp[2][n - 1]);
return 0;
}
POJ1651 Multiplication Puzzle【区间DP】的更多相关文章
- POJ1651:Multiplication Puzzle(区间DP)
Description The multiplication puzzle is played with a row of cards, each containing a single positi ...
- poj 1651 Multiplication Puzzle (区间dp)
题目链接:http://poj.org/problem?id=1651 Description The multiplication puzzle is played with a row of ca ...
- POJ 1651 Multiplication Puzzle 区间dp(水
题目链接:id=1651">点击打开链 题意: 给定一个数组,每次能够选择内部的一个数 i 消除,获得的价值就是 a[i-1] * a[i] * a[i+1] 问最小价值 思路: dp ...
- POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP
题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65 ...
- POJ1651:Multiplication Puzzle(区间dp)
Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9419 Accepted: 5850 ...
- [ZOJ]3541 Last Puzzle (区间DP)
ZOJ 3541 题目大意:有n个按钮,第i个按钮在按下ti 时间后回自动弹起,每个开关的位置是di,问什么策略按开关可以使所有的开关同时处于按下状态 Description There is one ...
- POJ1651Multiplication Puzzle[区间DP]
Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8737 Accepted: ...
- poj1651 Multiplication Puzzle
比较特别的区间dp.小的区间转移大的区间时,也要枚举断点.不过和普通的区间dp比,断点有特殊意义.表示断点是区间最后取走的点.而且一个区间表示两端都不取走时中间取走的最小花费. #include &l ...
- poj1651 Multiplication Puzzle(简单区间dp)
题目链接:http://poj.org/problem?id=1651 题意:一系列的数字,除了头尾不能动,每次取出一个数字,这个数字与左右相邻数字的乘积为其价值, 最后将所有价值加起来,要求最小值. ...
随机推荐
- react分享
后台项目应用分享 后台项目应用分享 webpack + react + redux + antd 后台项目应用分享 策略篇 框架选择 组件化开发 组件?组件! CSS in JS下的样式开发思路 展示 ...
- Django:学习笔记(9)——视图
Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...
- in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
最近在用ruby的一些库的时候,总是出现这个错误. 在使用net/imap库的时候,或者net/http库(主要是用到了https,https是用了ssl) 的时候,具体如下: 错误提示:E:/Rub ...
- DNS服务器配置实践
实验背景:在Linux系统上配置主要DNS服务器和辅助DNS服务器,所在域名为example.com,子网为192.168.X.0. 启动已安装LINUX系统,进行DNS服务器配置. 一.配置主要DN ...
- SQL: 查找空值
①用 IS NULL ②NULL 不能用 “=” 运算符 ③NULL 不支持加.减.乘.除.大小比较.相等比较 ④不同的函数对NULL的支持不一样,在遇到NULL时最好测试一下结果会受什么影响,不能仅 ...
- 搭建linux上的Eclipse+PHP编程环境
最近打算学PHP,于是查阅资料搭建了ubuntu(14.04.3)上的PHP IDE环境 一.准备工作(可略) 主要是推荐科大的源和配置源的方法,因为后于步骤使用到了apt,科大的源非常快,并且有个针 ...
- Cannot perform runtime binding on a null reference
一个方法的参数是dynamic obj 方法内调用了obj.Header 但是外部传递进来的obj是null,然后就会报这个错.
- 谈谈java中对象的深拷贝与浅拷贝
知识点:java中关于Object.clone方法,对象的深拷贝与浅拷贝 引言: 在一些场景中,我们需要获取到一个对象的拷贝,这时候就可以用java中的Object.clone方法进行对象的复制,得到 ...
- HDU 2485 Destroying the bus stations(费用流)
http://acm.hdu.edu.cn/showproblem.php?pid=2485 题意: 现在要从起点1到终点n,途中有多个车站,每经过一个车站为1时间,现在要在k时间内到达终点,问至少要 ...
- git关于 LF 与 CRLF
问题描述: 今天在idea上配置好了git操作到push,目测都没遇到什么问题. 但是再次点击提交按钮的时候,仍然提示我所有的文件都是需要提交的(我的主题中蓝色显示) 然而本地并无改动,在提交窗口得到 ...