POJ 1651 Multiplication Puzzle(类似矩阵连乘 区间dp)

传送门:http://poj.org/problem?id=1651

 

Multiplication Puzzle
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 13109 Accepted: 8034

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 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

Source

Northeastern Europe 2001, Far-Eastern Subregion
题目意思:
给你一串数字,头尾不能动,每次取出一个数字,这个数字贡献=该数字与左右相邻数字的乘积,求一个最小值。
分析:
是一个区间dp问题,类似矩阵连乘的做法,也是需要在一个区间中选择一个k值从而来达到你的某种要求,这里是要使得消去的值最小
概况一下题意就是:
初使ans=0,每次消去一个值,位置在pos(pos!=1 && pos !=n)
同时ans+=a[pos-1]*a[pos]*a[pos+1],一直消元素直到最后剩余2个,求方案最小的ans是多少?
#include <iostream>
#include<algorithm>
#include <cstdio>
#include<cstring>
using namespace std;
#define max_v 105
#define INF 9999999
int a[max_v];
int dp[max_v][max_v];
int main()
{int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d",&a[i]);}memset(dp,0,sizeof(dp));for(int r=2;r<n;r++){for(int i=2;i<=n-r+1;i++){int j=i+r-1;int t=INF;for(int k=i;k<=j-1;k++){t=min(t,dp[i][k]+dp[k+1][j]+a[i-1]*a[k]*a[j]);}dp[i][j]=t;}}printf("%d\n",dp[2][n]);}return 0;
}

 

转载于:https://www.cnblogs.com/yinbiao/p/9415933.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25--最后一个单词的长度

文章目录1.问题描述2.代码详情1.问题描述 给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s&#xff0c;返回其最后一个单词的长度。如果字符串从左向右滚动显示&#xff0c;那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词&#xff0c;请返回 0 。 说明&…

MySQL 企业监控器 2.3.10 正式版发布

Oracle于近日发布了 MySQL 企业监控器 2.3.10 正式版。 MySQL企业监控器主要用于实施对数据库进行监控和管理。通过它&#xff0c;数据库管理员不但可以获得高级的数据复制和数据库监控功能&#xff0c;同时还可以简化安装流程。而且&#xff0c;无论是对于MySQL企业版&#xf…

Docker 跨主机网络方案分析

PS&#xff1a;文章首发公众号&#xff0c;欢迎大家关注我的公众号&#xff1a;aCloudDeveloper&#xff0c;专注技术分享&#xff0c;努力打造干货分享平台&#xff0c;二维码在文末可以扫&#xff0c;谢谢大家。 上篇文章介绍了容器网络的单主机网络&#xff0c;本文将进一步…

java中为什么使用上转型和下转型

为什么使用上转型&#xff1f;因为当一个父类有很多子类&#xff0c;子类都重写了父类的方法并加以使用。这时候&#xff0c;如果要在之前代码让你用其他子类来实现&#xff0c;就变得很简单&#xff0c;只需要把A a new B();换成A a new C();&#xff08;假设B和C都继承了A&…

session和cache的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 以前实现数据的缓存有很多种方法&#xff0c;有客户端的Cookie&#xff0c;有服务器端的Session和Application。 其中Cookie是保存在客…

第四个

。 转载于:https://www.cnblogs.com/wxy2000/p/9657823.html

26-- 转换成小写字母

文章目录1.问题描述2.代码详情1.问题描述 实现函数 ToLowerCase()&#xff0c;该函数接收一个字符串参数 str&#xff0c;并将该字符串中的大写字母转换成小写字母&#xff0c;之后返回新的字符串。 示例 1&#xff1a; 输入: “Hello” 输出: “hello” 示例 2&#xff1a;…

java守护线程和用户线程的区别

Java中的线程可以分为两类&#xff0c;即用户线程和守护线程。用户线程是为了完成任务&#xff0c;而守护线程主要是为其他线程服务。 守护线程的唯一用途是为其他线程提供服务。守护线程会随时中断&#xff0c;因此不要在守护线程上使用需要释放资源的资源&#xff0c;如输入输…

初学duboo+zookeeper

看了很多相关资料&#xff0c;其实都没有自己动手试一次印象更深刻一些。找了很多教程&#xff0c;下工具&#xff0c;花了几个小时终于让程序跑起来了&#xff0c;下面说下步骤&#xff1a;1.java环境也就安装jdk&#xff0c;我使用的是1.7版本&#xff0c;jdk安装就不在这复述…

Fedora 17 Beta 版发布

Fedora团队今天发布了Fedora 17 Beta版本&#xff0c;这是正式版本发布前的最后一个重要的里程碑版本。据该团队介绍&#xff0c;正式版将在今年5月发布&#xff0c;将主要修复Beta版中发现的关键性bug。针对普通用户的桌面改进&#xff1a; 采用GNOME 3.4&#xff0c;提升了用…

27--字符串相加

文章目录1.问题描述2.代码详情1.问题描述 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和。 注意&#xff1a; num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库&…

[转] 一文弄懂神经网络中的反向传播法——BackPropagation

在看CNN和RNN的相关算法TF实现&#xff0c;总感觉有些细枝末节理解不到位&#xff0c;浮在表面。那么就一点点扣细节吧。 这个作者讲方向传播也是没谁了&#xff0c;666&#xff5e; 原文地址&#xff1a;https://www.cnblogs.com/charlotte77/p/5629865.html 最近在看深度学习…

java线程组

线程组 线程组是Java线程编程所持有的概念。在Java中&#xff0c;线程组是指java.lang.ThreadGroup类的对象&#xff0c;每个线程都隶属于唯一的一个线程组&#xff0c;这个线程组在线程创建时指定并在线程的整个生命周期内都不能更改。可以通过调用包含ThreadGroup类型参数的T…

FreeBSD 8.3 发布

近日&#xff0c;FreeBSD开发团队放出了8.x稳定分支的8.3版本。此次发行的版本将支持amd64、i386、pc98和 sparc64等处理器类型。FreeBSD是一种类UNIX操作系统&#xff0c;但不是真正意义上的 UNIX 操作系统&#xff0c;它是由经过 BSD、386BSD 和 4.4BSD 发展而来的 Unix 的一…

Java中四种访问权限总结

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Java中有四种访问权限&#xff0c; 其中三种有访问权限修饰符&#xff0c;分别为private、public、protected&#xff0c;还有一种不…

28--仅仅反转字母

文章目录1.问题描述2.代码详情1.问题描述 给定一个字符串 S&#xff0c;返回 “反转后的” 字符串&#xff0c;其中不是字母的字符都保留在原地&#xff0c;而所有字母的位置发生反转。 示例 1&#xff1a; 输入&#xff1a;“ab-cd” 输出&#xff1a;“dc-ba” 示例 2&…

Moving Average

移动平均算法Demo #!/usr/bin/python2.7 # Fetch data from BD and analyse.import json import urllib import traceback import numpy as np # import pandas as pd import matplotlib.pyplot as plt #from scipy import statsdef fetch_raw_data(url):try:response urllib.…

【前端工程师手册】JavaScript作用域拾遗

【前端工程师手册】JavaScript作用域拾遗 昨天总结了一些作用域的知识【前端工程师手册】JavaScript之作用域&#xff0c;但是发表完发现忘记了一些东西&#xff0c;今天拾个遗。 昨天说到了JavaScript中没有块级作用域&#xff0c;其实在es6中是有的。 es6中的块级作用域 先举…

游戏开发中的数据表示

声明&#xff1a;本文内容源自腾讯游戏学院程序公开课_服务端 一、数据表示的基础 什么是数据表示&#xff1f; 数据是信息的载体。 数据表示是一组操作&#xff0c;可以描述、显示、操作信息。 数据表示的要素 IDL - 接口描述语言 IDL是用来描述软件组件接口的一种计算机语言。…

29--反转字符串

文章目录1.问题描述2.代码详情1.问题描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中…