题面:能量项链https://www.luogu.com.cn/problem/P1063


乍一看和石子合并差不多,可是多了头值和尾值,看起来十分麻烦

我们画一张图,紫色表示头值,蓝色表示尾值。规定西边那个珠子编号为1,然后顺时针编号

很明显,我们现在要解决的是 dp [ i ] [ k ] 和 dp [ k+1 ] [ j ] 合并成的 dp [ i ] [ j ] 会变成什么样子

考虑1珠子和2珠子如果已经合并在一起,我们发现合并后的头值是1珠子的头值,合并后的尾值是2珠子的尾值

那么,是不是说dp [ i ] [  k ] 的头值就是a [ i ] ,尾值就是 a [ k+1 ] 呢

那么,是不是说 dp [ k+1 ] [ j ] 的头值就是a [ k+1 ],尾值就是 a [ j+1 ] 呢

状态转移方程就为:dp [ i ] [ j ] = max ( dp [ i ] [ j ] , dp [ i ] [ k ] + dp [ k+1 ] [ j ] + a [ i ] * a [ k+1 ] * a [ j+1 ] );

然后因为是环形,所以要扩大一倍计算。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
ll a[],dp[][];
int main()
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=n+;i<=n*;i++)
a[i]=a[i-n];
for(int l=;l<=n;l++)
{
for(int i=;i+l-<=*n;i++)
{
int j=i+l-;
for(int k=i;k<=j-;k++)
{
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+][j]+a[i]*a[k+]*a[j+]);
// dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i-1]*a[k]*a[j]);
}
}
}
ll ans=;
for(int i=;i<=n+;i++)
ans=max(ans,dp[i][i+n-]);
cout<<ans;
}

能量项链(区间DP入门)的更多相关文章

  1. P1063 能量项链 区间dp

    题目描述 在MarsMars星球上,每个MarsMars人都随身佩带着一串能量项链.在项链上有NN颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一 ...

  2. tyvj 1056 能量项链 区间dp (很神)

    P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩 ...

  3. 1154 能量项链[区间dp]

    1154 能量项链 2006年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 在Ma ...

  4. 洛谷P1063能量项链(区间dp)

    题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...

  5. tyvj 1056 能量项链 区间dp

    P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩 ...

  6. 能量项链//区间DP

    P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩 ...

  7. 洛谷 - P1063 - 能量项链 - 区间dp

    https://www.luogu.org/problemnew/show/P1063 这个并不是每次只能从两边扩展的,可以从中间断开. #include<bits/stdc++.h> u ...

  8. NOIP2006能量项链[环形DP]

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

  9. 区间DP入门题目合集

      区间DP主要思想是先在小区间取得最优解,然后小区间合并时更新大区间的最优解.       基本代码: //mst(dp,0) 初始化DP数组 ;i<=n;i++) { dp[i][i]=初始 ...

随机推荐

  1. 发布公开的pod

    发布公开的pod 方便项目 通过cocoapods 使用,便于版本版本管理,下面是简单步奏: 0.首次操作先要注册Trunk: pod trunk register zhujin001xb@163.c ...

  2. 【python实现卷积神经网络】开始训练

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  3. 【python实现卷积神经网络】padding2D层实现

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  4. 算法竞赛 从c到c++3

    const 常指针,指向固定位置,不能再次修改指向的位置,需要初始化,const 加在“*”号后面,名称前面,例如 int *const p: 指向常量的指针,不能修改指向地址的内容,相当于常引用,c ...

  5. 【做中学】第一个 Go 语言程序:漫画下载器

    原文地址: 第一个 Go 语言程序:漫画下载器: https://schaepher.github.io/2020/04/11/golang-first-comic-downloader 之前学了点 ...

  6. Ansible简明教程

    Ansible是当下比较流行的自动化运维工具,可通过SSH协议对远程服务器进行集中化的配置管理.应用部署等,常结合Jenkins来实现自动化部署. 除了Ansible,还有像SaltStack.Fab ...

  7. Linux学习笔记(三)目录和文件都能操作的命令

    目录和文件都能操作的命令 rm cp mv rm 英文原意:remove files or directories 功能:删除文件或目录 语法:rm 选项[-fir] 文件或目录 rm -f 强制删除 ...

  8. linux CVE-2019-14287 Sudo提权漏洞

    CVE-2019-14287 sudo介绍 sudo,也就是以超级管理员身份运行(superuser do)的意思.sudo 是 Linux 中最常使用的重要实用程序之一,它功能十分强大,几乎安装在每 ...

  9. Linux-LAMP虚拟主机配置

    1.配置用户认证 <Directory /data/discuz/passwd> AllowOverride AuthConfig AuthName "自定义的" Au ...

  10. PHP生成桌面快捷方式,保存一个网页至桌面上成为快捷方式

    header("Content-Type: application/octet-stream; charset=utf8"); header("Content-Dispo ...