能量项链--区间dp典例

该博客探讨了一种使用区间动态规划(DP)解决能量项链问题的方法。通过将环形问题转化为线性问题,利用dp[l][r]表示区间(l, r)内珠子组合的最大能量。通过区间划分和合并,找到最大能量值。" 125898582,14431842,疯壳无人机开发环境搭建指南,"['单片机', '嵌入式硬件', '51单片机', '物联网', 'MCU']
摘要由CSDN通过智能技术生成

题目
思路
1.断环成链
2.区间大小枚举
3.区间起点枚举
4.区间的划分枚举
分析
1.可以采用处理环形问题的通用技巧,即复制一份接到后面。这里虽然输入是N个数,但实际上我们要求的是长N + 1的区间的最大能量,所以要将这N个数重复一遍拼在后面,形成长2 N的数组,这样就转化为了线性问题

2.用dp[l][r]来代表区间(l,r)内所有珠子合成的这一颗能量珠所可能释放的最大能量。在区间( l , r )内,能量珠dp[l][r]的头标记为 a[ l ],尾标记为 a[ r+1 ] 用k将区间分成 l~k 和 k+1~r 左右两个部分来代表分左右子珠: dp[l][k]为左子珠所可能产生的最大能量 dp[k+1][r]为右子珠所可能产生的最大能量 k为左子珠的尾标记,k+1为右子珠的头标记
将最初能量珠的数据存到数组w中, 则第 l 颗能量珠的头标记为w[ l ],尾标记为w[ l + 1 ],合并珠子即合并左珠dp[l][k]和右珠dp[k+1][r],释放能量a[l]∗a[k+1]∗a[r+1]

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 1e3 + 5;
const ll MOD = 1e9 + 7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值