区间DP总结(一)

好题

【NOIP2000提高】乘积最大 需要用到高精度,目前还不会。
【NOIP2006提高组】能量项链
【NOI1995】石子合并 经典区间DP
【POJ1141】Brackets Sequence 括号匹配

区间DP总结

值得细看的博客、动态规划之区间DP专题
1、石子合并题目:区间DP模板。

#include<bits/stdc++.h>
#define N 101

using namespace std;
int n,a[2*N],f[2*N][2*N],dp[2*N][2*N],sum[2*N];

int main()
{
    cin>>n;
    memset(f,0x3f,sizeof(f));
    for(int i=1;i<=n;i++) {
        cin>>a[i];
        a[i+n]=a[i];
        f[i][i]=f[i+n][i+n]=0;
    }
    for(int i=1;i<=2*n;i++){
        sum[i]=sum[i-1]+a[i];
    }
    for(int len=2;len<=n;len++){//枚举长度
        for(int i=1;i<=2*n-len+1;i++){//确定左右端点
            for(int j=i;j<i+len-1;j++){//确定分开点
                f[i][i+len-1]=min(f[i][i+len-1],f[i][j]+f[j+1][i+len-1]);//决策
                dp[i][i+len-1]=max(dp[i][i+len-1],dp[i][j]+dp[j+1][i+len-1]);//决策
            }
            f[i][i+len-1]+=sum[i+len-1]-sum[i-1];
            dp[i][i+len-1]+=sum[i+len-1]-sum[i-1];
        }
    }
    int ans1=1000000000,ans2=0;
    for(int i=1;i<=n;i++){
        ans1=min(ans1,f[i][i+n-1]);
        ans2=max(ans2,dp[i][i+n-1]);
    }
    cout<<ans1<<endl<<ans2<<endl;
}

类似的题目能量项链

今日总结

今天没看多少题,通过看博客学习了复习了之前学的区间DP,以前学的有点差劲,现在再学一遍感觉好了很多。可能快开学了,最近注意力有点不集中,老是开小差,希望明天能够沉下心来学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值