poj1651 区间DP

动态规划学习笔记-POJ1651 原题地址题目大意:在一列卡片中每次抽取一张卡片(最左右两张不可抽), 将这张卡片的值与相邻卡片的值相乘, 所得的结果计入分数中, 求使得总分数最少的抽法.分析:用动态规划求解, 令cards[n]为卡片序列,dp[i][j]为第i张卡片到第j张卡片最优的抽取结果 1. 当 j - i = 2 的时候,则dp[i][j] = cards[i] * cards[i+1] * cards[j] 阅读详情

The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product of the number on the card taken and the numbers on the cards on the left and on the right of it. It is not allowed to take out the first and the last card in the row. After the final move, only two cards are left in the row. 

The goal is to take cards in such order as to minimize the total number of scored points. 

For example, if cards in the row contain numbers 10 1 50 20 5, player might take a card with 1, then 20 and 50, scoring 

10*1*50 + 50*20*5 + 10*50*5 = 500+5000+2500 = 8000


If he would take the cards in the opposite order, i.e. 50, then 20, then 1, the score would be 

1*50*20 + 1*20*5 + 10*1*5 = 1000+100+50 = 1150.

Input

The first line of the input contains the number of cards N (3 <= N <= 100). The second line contains N integers in the range from 1 to 100, separated by spaces.

Output

Output must contain a single integer - the minimal score.

Sample Input

6
10 1 50 50 20 5

Sample Output

3650

题目大意:给你一个算是数组串吧,有n个数,你需要从中拿出n-2个数,每拿出一个数就要有相应的的分数或者是费用,该费用的计算公式是:a[i-1]*a[i]*a[i+1],i是你所拿出的下标,其中第一个与最后一个是不能拿的,要使其和最小

区间上的问题,了解一下区间DP

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
#define rep(i,a,b) for(int i=a;i<=b;i++)
const int MAXN=0x3f3f3f3f;
ll dp[105][105];
ll a[120];
int main(){

   int n;
   cin>>n;
 memset(dp,0,sizeof(dp));
   rep(i,1,n)
   cin>>a[i];
//   rep(i,1,n-2)
//   dp[i][i+2]=a[i]*a[i+1]*a[i+2];
   rep(len,3,n)//这里从第三位开始,因为前两位的计算是没有意义的
   {
       for(int i=1;i+len-1<=n;i++)
       {
           int j=len+i-1;
           dp[i][j]=MAXN;//一开始我是将其dp数组初始化为无穷大,对角线上的值为0,但是你在下一
           rep(k,i+1,j-1)//个for循环里面需要用到dp[1][2]的值为0,虽然它是原则上无意义的,但在  //                                                                            dp
           dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]);//的状态转移方程中
       }//却是需要的,如果全部为无穷大,就无法求出最小值,因此在这里就用哪个区间时,就令哪个区间
   }//为无穷大。
   cout<<dp[1][n]<<endl;
    return 0;
}

 

POJ 1651 - Multiplication Puzzle(区间DP,矩阵链乘三种模版详解) 【题意】题目链接http://poj.org/problem?id=1651 给出n(<=100)个数字,每一个数字有一个权值Ai,求从中抽出除了第一个和最后一个以外的中间的数字的最小费用。抽取的顺序不同最后总的费用也不同,每次抽取第i个数字的费用为a[i-1]*a[i]*a[i+1]; 阅读详情

相关推荐

RADIOML 2018.01A调制信号数据集介绍及处理

RadioML 2018.01A 由 DeepSig 发布,是专门针对自动调制识别(Automatic Modulation Recognition, AMR)和无线信号分类研究设计的基准数据集。它在原有 RadioML 2016.10a 的基础上,扩展并精细化了信道仿真模型,使得信号更接近真实无线环境下的表现。该数据集广泛用于机器学习模型的训练与评估,为各类深度学习算法提供了统一、可重复的实验条件。

weixin_56527269的博客 1885

POJ - 1651 Multiplication Puzzle

题意:给你ñ张卡牌 你有N-2次操作 每次可以抽取一张卡牌(不能是第一张和最后一张) 抽取的代价为当前卡牌和相邻卡牌的乘积 求最小的费用 思路:抽取一张卡牌的费用为当前卡牌和相邻卡牌的乘积 假设【我】【Ĵ】区间内(不包括I,J)都被抽取了 则i,j可以...

HydraHuYu 560

嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

想要把qt工程放到开发板上运行,就需要用到交叉编译。由于qt是跨平台的,所以只需要换个编译器编译一下就可以。 以“定时器”的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时候,电脑屏幕很大,但是运行的窗口只有一点点大,开发板也有外接屏幕,如何让运行窗口自动适配开发板的外接屏幕呢?令其占满屏幕显示,而不是一小块。 第一步:需要设置一下,先给ui布局,如果不布局,控件就不会随着屏幕的大小的变化而变化。 第二步:利用代码来获取屏幕的大小,给widget.cpp文件下添加如下代码 #inclu

qq_42822743的博客 5456

POJ 1651 Multiplication Puzzle(区间DP)

Description The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points

SSimpLe_Y的博客 742

NHANES更新数据后,权重计算方式也更新了

官网说明在此:如果你比我还懒,我下载了几个说明文件。2021年8月至2023年8月的总样本量与之前的2年周期相似。然而,。特别是,与之前包括过度抽样的周期相比,非西班牙裔白人的样本量较高,而非西班牙裔黑人的样本量较低。此外,60岁及以上人群的样本量较高,而年轻群体的样本量较低。子组的估计值可能具有较低的精确度,因此,检测组间差异的统计能力可能较低。此外,年龄和种族/西班牙裔亚组(尤其是儿童和青少年年龄组)的估计值可能会显示意想不到的模式。

珏世佳人的博客 2409

管理信息系统(MIS)设计

一名读者可以借阅多本图书,而一本图书也可以被不同的读者借阅,所以读者与图书之间存在着多对多的借阅关系,读者与图书之间存在着多对多的联系,即m:n的联系。每一种图书属于一种图书类型,而一种图书类型可以包含很多本图书,因此可以得到图书类型与图书之间也存在着一种一对多的联系,即图书类型与图书是1:n的联系。系统应该实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、图书归还登记、过期图书处理、丢失图书处理及读者借阅证件信息的维护等;

m0_69718745的博客 2475

【区间dp】poj 1651 Multiplication Puzzle

题意:区间[1,n]每次从中抽出一张牌,直到只剩下最外面两张牌。 每次抽牌的得分是被抽到的牌左边所有牌的乘积*被抽到的牌*右边所有牌的乘积,问得分之和最小是多少? 思路:当区间只有三个数a1,a2,a3的时候得分是a1*a2*a3 设ak为最后一次取出来的数,那么最后一次得分只与a1,ak,an有关,把整个区间以k分为两半,那么 dp[1][n]=dp[1][k]+dp[k][n]+a[1]...

iroy33的博客 319

RK3566添加ffpeg【Buildroot系统】

有很多人都发现了RK3566系列的芯片是不可以直接使用ffmpeg官网源码的!会报错: Not a video capture device. /dev/video0: No such device 接下来我们就来解决这个问题!!

honmy18的博客 4069

DP:Multiplication Puzzle(POJ 1651)

                                     卡片游戏   题目大意:给你一排卡片,你可以从从中抽一些卡片(但是不能抽最左和最右的卡片),每张卡片上有一个数字,当你从中抽出一张卡片后,你将得卡片的数字和卡片左右两张卡片的数字的乘积的分数,问当剩下最左和最右两张卡片的时候,你可以得到的最小的分数?   这一题一看好像挺复杂的,但是如果我们换一个思维方式,这...

bandilan2400的博客 151

微信自动化进阶:Python识别特定消息并自动回复(基于win32api控件操作)

本文详细介绍了如何使用Python和win32api实现微信消息的智能监控与自动回复。通过精准识别聊天记录中的特定关键词,结合多级匹配策略和性能优化技巧,构建稳定高效的自动化回复系统,适用于企业客服、个人助手等场景。

weixin_42663213的博客 441

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

POJ1651(区间DP)

好像区间DP都是枚举起点终点然后找一个中间状态进行一种类似松弛一样的更新??? 题目链接 题意:给定一组数字,从中任选除了首尾之外的数字,每次拿数字的花费为这个数这个数之前的数这个数之后的数,求总花费最小。 题解: 区间DP dp[i][j]从i到j的最优解。 比较容易想到通过求解小区间最优解得到最后总区间的最优解。 很明显当l == r - 1时候DP值为0 当l == r - ...

开心铁匠铺 812

新凯来嵌入式面经及参考答案

利用编译器预定义宏判断目标架构,如。

大模型大数据攻城狮的专栏 2065

poj1651 区间dp

poj1651 区间dp 题目链接:http://poj.org/problem?id=1651 题的大意是:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积。直到只剩下首尾两个数为止。问最小得分是多少? dp[i][j] : 以i和j作为左右端点取数后的最小代价(最后只剩i和j) 转移方程: dp[i][j]=min(dp[i][j],dp[i...

wangkr ‘s blog 218

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

poj1651 Multiplication Puzzle(简单区间dp)

题目链接:http://poj.org/problem?id=1651 题意:一系列的数字,除了头尾不能动,每次取出一个数字,这个数字与左右相邻数字的乘积为其价值, 最后将所有价值加起来,要求最小值。 这题容易会想到贪心就是先把最大的数先取出这样就能满足剩下的总价值尽可能的小,如果出现多个一样 的数时优先取走价值小的,但是如果有出现多个价值一样的话就不好处理了。 于是可以考虑一...

awow80285的博客 138

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

poj1651 Multiplication Puzzle 区间DP

题目链接:http://poj.org/problem?id=1651 区间DP思想: 定义dp[i][j]表示区间(i,j)删除其中的所有元素后(当然是不包括i,j了啊)的最优值,那么 dp[i][j]=min(dp[i][k]+dp[k][j]),其中k为区间i,j中最后删除的元素,(i<k<j); 有了状态转移方程,实现起来就很方便了啊。 我用了迭代和记忆化搜索两种方式...

weixin_30457551的博客 88

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Multiplication Puzzle(POJ - 1651)(动态规划-区间dp)

Multiplication Puzzle(POJ - 1651)(动态规划-区间dp) judge:POJ 1651 Time Limit: 1000MS Memory Limit: 65536K source:Northeastern Europe 2001, Far-Eastern Subregion Description The multiplication puzzle is pl...

画船听雨眠 421

【区间DP】POJ 1651 Multiplication Puzzle

POJ 1651 Multiplication Puzzle(区间DP)/* 题意: 给你n长度的序列,可以移除一个非首和尾的数,将数和左右两边的数相乘,要求移除完后和最小。 题解: 区间(l,r)可以取区间中间的k(代表区间最后取的数)枚举取最小, dp[l][r] = dp[l][k]+dp[k][r]+a[k]*a[l]*a[r]; */ #include <cstdio> #include

学无纸巾 306

POJ 1651 Multiplication Puzzle(区间dp)

题目链接: POJ 1651 Multiplication Puzzle 题意: 给出nn个数,每次可以选择从中取走一个数,取走的代价是它左右以及自身三个数的乘积,不允许取走首末两个数字,求将中间n−2n-2个数字都取走的最小代价和? 数据范围:n≤100,每个数字∈[1,100]n\leq 100,每个数字\in [1,100] 分析; 比较简单的区间dp. 用dp[i][j]dp[

ramay7 431

poj-1651-Multiplication Puzzle--区间DP

poj-1651-Multiplication Puzzle--区间DP Multiplication Puzzle Time Limit:1000MS Memory Limit:65536K Total Submissions:10734 Accepted:6704 Description The m...

weixin_30430169的博客 123

POJ - 1651 区间dp

POJ - 1651 区间dp 题目链接 题目大意:n个数,每次取一个数(第一个数和最后一个不能取),得到的值是这个数和相邻两边的乘积,问得到的结果最小值是多少 sample: 5 10 1 50 20 5 输出: 1150 1*50*20 + 1*20*5 + 10*1*5 = 1000+100+50 = 1150. 心路历程:因为是区间dp的题,所以毫不犹豫就去想区间dp了。一...

deerly_的博客 321

poj 1651 区间dp

题意: n个数字组成的序列,每次取出一个数字,这个数字不能是最左端或最右端的数字,取第i个数字需要的代价为a[i-1] * a[i] * a[i+1],最后只剩下最左端和最右端的数字。问最小代价是多少。3 &lt;= n &lt;= 100。 题解: 1.dp[i][j]表示[i , j]区间取完(i , j)区间的数字的最小代价。 2.dp[i][j] = min(dp[i][j] , ...

Irving0323的博客 271

POJ 1651——Multiplication Puzzle【区间DP & 记忆化搜索】

题目传送门 Description The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of poi...

NIRVANA REBIRTH 265

暑假训练 Multiplication Puzzle POJ - 1651 区间dp

在此做一个dp小结吧。 背包问题已经说过了,虽然都是最简单的背包问题(太菜了)然后是: 区间dp 题目大意:一个数组两端数据不能取,每次取出数据所得分数为所取数据与相邻两个数据的乘积,求取出所有数字(不包括两端)后的最小分数。。。POJ - 1651 #include&amp;amp;lt;cstdio&amp;amp;gt; #include&amp;amp;lt;algorithm&amp;amp;gt; #include&amp;amp;lt;cstring

wbl1970353515的博客 194

poj 1651 Multiplication Puzzle(区间DP)

题目链接: http://poj.org/problem?id=1651 题目大意: 在一串长为n的数字里面,一个个的选数直到只剩下2个数。取数的过程中记录下分数,规定只能在两个数中间取一个数,假设这三个数是a1,a2,a3,那么分数就是a1*a2*a3。 现在问怎么选数才能使总得分最低。 思路: 区间DP。跟矩阵连乘其实是一样的。 我设dp[i][j]表示i~j区间里面取数获得

hahahaha 433

poj 1651 Multiplication Puzzle【区间DP】

poj 1651 Multiplication Puzzle【区间DP】 题目链接:http://poj.org/problem?id=1651 题意:初使ans=0,每次消去一个值,位置在pos(pos!=1 && pos !=n) 同一时候ans+=a[pos-1]*a[pos]*a[pos+1]。一...

weixin_30646505的博客 71
上一篇: 数位DP HDU 2089
下一篇: upc 6622 博弈
Charon_HN
博客等级 码龄9年 155粉丝 277原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值