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

int dp(int l,int r) {
    if(f[l][r]!=inf) return f[l][r];
    for(int k=l+1;k<r;k++)
        f[l][r]=min(f[l][r],dp(l,k)+dp(k,r)+a[l]*a[k]*a[r]);
    return f[l][r];
}

int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    memset(f,0x3f,sizeof(f));
    for(int i=1;i<=n;i++) f[i][i]=f[i][i+1]=0;
    printf("%d\n",dp(1,n));
    return 0;
}
时间: 2024-07-28 17:57:11

codeVS1966 乘法游戏的相关文章

【区间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

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

【TYVJ P1014】乘法游戏

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

&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

乘法游戏

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

计划,,留

下面给出的题目共计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"

大神刷题表

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

算法竞赛入门经典+挑战编程+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

博弈练习

1.有N(N<=1000)个贪婪的海盗,他们得到了100,000个金币,决定分赃.他们都很精明,都想自己利益最大化,并采取如下策略: 1. 首先N人排好次序. 2. 由编号最大者给出分赃方案. 3. 所有人表决,50%及以上的人赞成就分赃成功,否则转4. 4. 杀掉提案者(总人数少了1),转2.  你的任务:判断第几号海盗得最多金币,有多少个. Sol:有n个人的策略都源于有n-1个人的策略,即这个人的获利比n-1的时候获利高,就会赞成 n=1 1:100000 n=2 1:0 2:100000