Multiplication Puzzle
Time Limit: 1000MS
Memory Limit: 65536K
Total Submissions: 9419
Accepted: 5850

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

# include <stdio.h>
# include <string.h>
int min(int a, int b)
{
return a<b?a:b;
}
int main()
{
int n, len, i, k, imin1, imin2, imin, a[102],dp[102][102];
while(scanf("%d",&n) != EOF)
{
memset(dp,0 ,sizeof(dp));
for(i=0; i<n; ++i)
scanf("%d",&a[i]);
for(i=1; i<n-1; ++i)
dp[i][i] = a[i]*a[i-1]*a[i+1];//初始化
for(len=1; len<n; ++len)//枚举区间
for(i=1; i+len<n-1; ++i)
{
//枚举最后消去的点
imin1 = dp[i+1][i+len]+a[i]*a[i-1]*a[i+len+1];//(为首点)
imin2 = dp[i][i+len-1]+a[i+len]*a[i-1]*a[i+len+1];//(为尾点)
imin = min(imin1, imin2);
for(k=i+1; k<i+len; ++k)//(为中间点)
imin = min(imin, dp[i][k-1]+dp[k+1][i+len]+a[k]*a[i-1]*a[i+len+1]);
dp[i][i+len] = imin;
}
printf("%d\n",dp[1][n-2]);
}
return 0;
}

转载于:https://www.cnblogs.com/junior19/p/6730110.html

最新文章

  1. 使用IExport进行图片输出出现File creation error
  2. 中等难度SQL语句(存储过程,分页,拼接字段、游标,日期类型转换,动态行转列,视图)汇总
  3. &lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; url=&quot;&gt;是什么意思?
  4. 从0开始学Java——JSP&amp;Servlet——HttpServletRequest相关的几个路径信息
  5. ajax实现的无刷新分页代码实例
  6. Android源码分析-消息队列和Looper
  7. 一次node-sass安装记录
  8. 跟我一起写Makefile
  9. RS485 / RS422
  10. python -- ajax数组传递和后台接收
  11. #微码分享#C++变参字符串格式化函数format_string
  12. MVC 如何在action中获取当前网站的根路径
  13. clear &amp; file input &amp; reset &amp; file input
  14. Java程序性能定位工具-火焰图
  15. 基于at91sam9g10的工控板
  16. .net多线程,线程异步,线程同步,并发问题---1---ShinePans
  17. Scratch3.0——克隆代码仓库的正确姿势
  18. 【2018 “百度之星”程序设计大赛 - 初赛(B)- 1001】degree
  19. 谈谈对zynq的浅显理解
  20. android library使用方法

热门文章

  1. PTA数据结构与算法题目集(中文) 7-34
  2. 【PHP】PHP基本语法
  3. flask 入门之 logging
  4. Typora+PicGo+GitHub实现md自带图床效果
  5. 34.4 对象流 ObjectOutputStream ObjectInputStream
  6. matplotlib 显示最后n条数据(可用于实时更新)
  7. 判断一组checkbox/redio是否被选中,为其添加样式
  8. web.page.regexp用法(全网唯一)
  9. Scanner的小细节
  10. 对于不平凡的我来说,从小我就在想为啥别人就什么都能拥有,而看看自己却什么都没有,对于原来的我就会抱怨爸妈怎么没有别人父母都能给自己想要的,可我从未想过父母的文化只有小学,其实父母内心也有太多的辛酸,所以我不甘愿如此,从此让我在大学里面直接选择一个让我巨大的转折————IT。