【TYVJ P1014】乘法游戏

时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

太原成成中学第2次模拟赛 第四道

描述

乘法游戏是在一行牌上进行的。每一张牌包括了一个正整数。在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌。最后一次移动后,这里只剩下两张牌。
    你的目标是使得分的和最小。
    例如,如果数是10 1 50 20 5,依次拿1、20、50,总分是                       10*1*50+50*20*5+10*50*5=8000
    而拿50、20、1,总分是1*50*20+1*20*5+10*1*5=1150。

输入格式

输入文件的第一行包括牌数(3<=n<=100),第二行包括N个1-100的整数,用空格分开。

输出格式

输出文件只有一个数字:最小得分

测试样例1

输入


10 1 50 50 20 5

输出

3650

  TYVJ的评测机不行了。搞得我得下测试数据。

  这道题明显是一道动态规划题,而且是区间动规。那么怎么建立状态转移。

  首先我们很容易想到,大区间都是由小区间推出来的,那么就会存在最优子结构。

  然后,无论小区间怎么样都无法影响大区间的答案。那么状态转移方程就呼之欲出了。

  设f[1][n - 2]是答案。

  f[i][j] = min{f[i][k - 1] + f[k + 1][j] + a[i - 1] * a[k] * a[j + 1] | i < k < j}

  但是呢,我们得先预处理出f[i][i]和f[i][i + 1]的答案并且把f[i][j] | j < i 的值设为0。

  

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdlib>
 6 using namespace std;
 7
 8 long long f[105][105];
 9 int a[105];
10 int n;
11
12 int main()
13 {
14     scanf("%d", &n);
15     for (int i = 0; i < n; ++i)
16         scanf("%d", &a[i]);
17     memset(f, 0x7f, sizeof(f));
18     f[0][0] = f[n - 1][n - 1] = 0;
19     for (int i = 1; i < n - 1; ++i) f[i][i] = a[i - 1] * a[i] * a[i + 1];
20     for (int i = 1; i < n - 2; ++i)
21         f[i][i + 1] = min(f[i][i] + f[i + 1][i + 1] / a[i] * a[i - 1], f[i + 1][i + 1] + f[i][i] / a[i + 1] * a[i + 2]);
22     for (int i = 1; i < n; ++i)
23         for (int j = 0; j < i; ++j)
24             f[i][j] = 0;
25     for (int i = n - 2; i > 0; --i)
26         for (int j = i + 1; j < n - 1; ++j)
27             for (int k = i; k <= j; ++k)
28                 f[i][j] = min(f[i][j], f[i][k - 1] + f[k + 1][j] + a[i - 1] * a[k] * a[j + 1]);
29     cout << f[1][n - 2] << endl;
30     //system("pause");
31     return 0;
32 }
时间: 2024-10-20 21:40:09

【TYVJ P1014】乘法游戏的相关文章

乘法游戏

P1014 乘法游戏 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 太原成成中学第2次模拟赛 第四道 描述 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌.最后一次移动后,这里只剩下两张牌.    你的目标是使得分的和最小.    例如,如果数是10 1 50 20 5,依次拿1.20.50,总分是                       1

tyvj1014 乘法游戏

描述 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌.最后一次移动后,这里只剩下两张牌.    你的目标是使得分的和最小.    例如,如果数是10 1 50 20 5,依次拿1.20.50,总分是                       10*1*50+50*20*5+10*50*5=8000    而拿50.20.1,总分是1*50*20+1*20*5+10*1*5=1150. 输

&lt;区间DP&gt; 乘法游戏

链接:http://nanti.jisuanke.com/t/213 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌.最后一次移动后,这里只剩下两张牌. 你的目标是使得分的和最小. 例如,如果数是10  1  50  20  5,依次拿1.20.50,总分是10*1*50+50*20*5+10*50*5=8000 而拿50.20.1,总分是1*50*20+1*20*5+10*1*5=115

codeVS1966 乘法游戏

区间dp. 用f[l][r]代表从l合并到r的最小得分. 显然 r-l<=1时,f[l][r]=0. 对区间dp一直很不熟悉,得多练练了. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 100 + 10; const int inf = 0x3f3f3f3f; int n; int a[maxn],f[maxn][maxn];

【区间dp】codevs1966 乘法游戏

f(i,j)=min{f(i,k)+f(k,j)+a[i]*a[k]*a[j]}(1<=i<=j<=n,i<k<j) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,a[101],f[101][101]; int main() { // freopen("codevs1966.in","r&quo

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

动态规划——线性

Tyvj 1008 传球游戏 背景 NOIP2008复赛普及组第三题 描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了

计划,,留

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 一.<算法竞赛入门经典> 刘汝佳 (UVaOJ 351道题) 以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html "AOAPC I"

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO