区间dp 石子合并+cf

282. 石子合并 - AcWing题库

题意是给你一堆石子,每次合并都只合并相邻的两堆,代价是两堆的石子质量,问你合并到最后(合并到一堆)最小代价为多少

因为最后都要划归到一个问题上,就是合并到最后是左右两边连续的区间,这可以想到区间dp

令f【i,j】为把从i到j的这一段合并的最小代价

整个石子,从1到n,有很多个区间,所以这个时候需要枚举区间然后对每个ij分别进行计算

对于从i到j这单独的一个区间,刚刚上面也说了。对于一个区间它最后的分法必然是左边的连续的一段和右边连续的一段。

所以对于这个[i,j]来说,设这个区间的分界点是k,然后一个整区间i,j可以变成[i,k]和[k+1,j],

———k——————

如图上面的两段,那f[i,j]=f[i,k]+f[k+1,j]+s[i,j]

就是先有两堆,两堆的代价分别是f[i,k]和f[k+1,j]然后两堆要合并到一堆,那没有区别,直接全部都加起来好了

#include<iostream>
using namespace std;
const int N=500;
int f[N][N],a[N];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]+=a[i-1];
    }
    for(int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值