Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

乘法难题是一种用一行的卡片来玩的单人游戏,每张卡片上有一个正整数。在游戏者从中拿出一卡片,并且得到一个分数,它等于被拿走的卡片上的数与这张卡片左右两张卡片上的整数的积。第一张与与最后一张卡片不能被拿出。在最后一次移动后,这行卡片中只剩下两张。 你的目标是怎样确定拿卡片的顺序,以使得总分数的值最小。例如,有一行的卡片,它上面的数字为10 1 50 20 5, 游戏者可以先取走1这张卡片,然后是20 和50,总分数为10*1*50
+ 50*20*5 + 10*50*5 = 500+5000+2500 = 8000,如果他先拿50, 然接着20,最后取出1, 总分数为1*50*20 + 1*20*5 + 10*1*5 = 1000+100+50 = 1150。

【输入格式】

输入文件的第一行包含卡片的总数N(3 <= N <= 100),第二行包含N个范围在1到100之间的整数(两个整数之间有一个空格)

【输出格式】

输出文件包含一个整数,为最少的分数。

【数据规模】

Sample Input1

6
10 1 50 50 20 5

Sample Output1

3650
【题解】
设f[i][j]表示从i到j,除了i和j之外都被取走所能得到的最小分数。
f[i][j] = min(f[i][k]+f[k][j]+a[i]*a[k]*a[j]); i<k<j;
初值:f[i][i+1] == 0;
更新方式如下:
for (int L=2;L<= n;L++)
for (int s = 1;s <= n-l;s++)
{

int t = s+l;
for (int k = s+1;k<=t-1;k++)
f[i][j] = min(f[s][k]+f[k][t]+a[i]*a[k]*a[t],f[i][j]);

}
最后答案为f[1][n];
这里一定要先枚举这段的长度。
这样我们可以先获得像f[1][3],f[2][4],f[3][5]..f[n-2][n]这样的值。
然后我们在求f[1][4]的时候k在2..3枚举
f[1][4] = min(f[1][2]+f[2][4]+a[1]*a[2]*a[4],f[1][3]+f[3][4]+a[1]*a[3]*a[4]);
可以看到我们在求f[1][4]的时候要用到的f[2][4],f[1][3]都已经求出来了 。
这是原因所在。
也是这种类型动规的原理->不断利用小的区间扩大区间。
【代码】
#include <cstdio>
#include <cstring> int a[101],n,f[101][101]; int main()
{
memset(f, 127 / 3, sizeof(f));//一开始f数组赋值为一个很大的数字。
scanf("%d", &n);
for (int i = 1; i <= n; i++)//读入数据
scanf("%d", &a[i]);
for (int i = 1; i <= n - 1; i++)//从i到i+1除了i和i+1都不拿 那就是什么都没有。
f[i][i + 1] = 0;
for (int l = 2;l <= n;l++)//先枚举小的长度。为后面大的长度作铺垫。
for (int s = 1; s <= n - l; s++)//枚举起点。
{
int t = s + l;//这是终点
for (int k = s + 1; k <= t - 1; k++)//利用之前得到的小的区间最优值扩大。
{
int temp = f[s][k] + f[k][t] + a[s] * a[t] * a[k];//f[s][k]里有s,k。f[k][t]也有k,t。
//且只剩下k没取。那就把它取下来。看看是否更优。
if (temp < f[s][t])
f[s][t] = temp;
}
}
printf("%d\n", f[1][n]);
return 0;
}

【u011】乘法难题的更多相关文章

  1. 【动态规划】XMU 1029 矩阵链乘法

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1029 题目大意: 题同乘法难题.给n+1个数,头尾不能动,中间的数可取出,取出时代价是 ...

  2. 动归专题QAQ(两天创造的刷题记录哟!✿✿ヽ(°▽°)ノ✿✿)(未填坑)

    1092 采药:由于没有限制开始时间和结束时间,01背包就好了 1095 开心的金明:01背包,无fuck说 1104 摆花:f[i][j]表示摆了i种花,第i种花摆了j种的方案数,乱转移0.0(感觉 ...

  3. 5200 fqy的难题----2的疯狂幂

    5200 fqy的难题----2的疯狂幂  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description ...

  4. C语言 · 乘法表

    问题描述 输出九九乘法表. 输出格式 输出格式见下面的样例.乘号用"*"表示. 样例输出 下面给出输出的前几行:1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94 ...

  5. C语言 · 矩阵乘法 · 算法训练

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  6. python_九九乘法表

    # 九九乘法表 print(" 九九乘法表") for table_x in range(1,10): for table_y in range(1,table_x +1): pr ...

  7. 【转】Python实现不同格式打印九九乘法表

    前言:最近在学习Python,学习资源有慕课网上的视频教程.菜鸟教程以及Python官方文档tutorial.虽然了解了Python的基本语法,但是还没有真正意义上输出自己写的代码.代码小白,之前仅学 ...

  8. 蓝桥杯算法提高 P1001(大数乘法)

      算法提高 P1001   时间限制:1.0s   内存限制:256.0MB   当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法. 具体 ...

  9. 深入super,看Python如何解决钻石继承难题 【转】

    原文地址 http://www.cnblogs.com/testview/p/4651198.html 1.   Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通 ...

随机推荐

  1. Android 打造属于自己的RxBus

    RxBus 通过RxJava实现Rxbus. 相信大家已经非常熟悉EventBus了.最近正在学习Rxjava,如果在项目中已经使用了Rxjava,使用RxBus来代替EventBus应该是不错的选择 ...

  2. pycharm 注册 License server方式

    在输入框输入以下内容即可:http://idea.yangyusb.com

  3. Docker 搭建java+tomcat

    1. 准备java和tomcat的软件包 jdk-7u79-linux-x64.tar.gz apache-tomcat-7.0.57.tar.gz 2. 编辑Dockerfile 文件 vim Do ...

  4. 关于搭建Session服务器(转载)

    Session服务器配置指南与使用经验 一.摘要 所有Web程序都会使用Session保存数据. 使用独立的Session服务器可以解决负载均衡场景中的Session共享问题.本文介绍.NET平台下建 ...

  5. JavaScript学习总结(4)——JavaScript数组

    JavaScript中的Array对象就是数组,首先是一个动态数组,无需预先制定大小,而且是一个像Java中数组.ArrayList.Hashtable等的超强综合体. 一.数组的声明 常规方式声明: ...

  6. CODEVS——T1979 第K个数

    http://codevs.cn/problem/1979/ 时间限制: 1 s  空间限制: 1000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descript ...

  7. 109.vprintf vfprintf vscanf vfscanf

    vprintf //输出到屏幕 int POUT(char *str, ...) { va_list arg_p=NULL; //读取 va_start(arg_p, str); //接受可变参数 i ...

  8. 【2017 Multi-University Training Contest - Team 10】Schedule

    [链接]http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=767 [题意] 给一些区间,每台机器在这些区间 ...

  9. 人工智能计算器AI Calculator 3.3.0 具体破解思路&amp;教程

    人工智能计算器AI Calculator 3.3.0 具体破解思路&教程 [文章标题]:人工智能计算器AI Calculator 3.3.0 具体破解思路&教程 [文章作者]: Eri ...

  10. JSP语法基础(一)

    一.JSP页面中的凝视 (1)HTML凝视 <!-- comment [ <%=expression %> ] --> 能在client显示的一种凝视,标记内的全部JSP脚本元 ...