#10151. 「一本通 5.1 练习 2」分离与合体 题解

分离与合体这道题,我看很多大佬的做法都。。。不太亲民,就决定自己想一想。

虽然这是一道区间动规题,但我做的时候并没有往哪个方向想。我的总体思想就是最短路径思想,然后枚举,一个区间一个区间的枚举。

(真.无双.暴力

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,a[301];//n为区间数,a数组为区间里金钥匙的价值 
int f[301][301],path[301][301];//f[i][j]指的是从第i到第j区间可获得的金钥匙的最大价值
//path[i][j]存的是在i到j区间之间LYD分裂的区间 
int q[301][2];
//q[i][0]为当前区间的左端点,q[i][1]为右端点 
void Print()
{
    int l=1,r=1;
    q[1][0]=1,q[1][1]=n;
    while(l<=r)
    {
        int a=path[q[l][0]][q[l][1]];
        cout<<a<<" ";
        if(q[l][0]!=a)
        {
            r++;
            q[r][0]=q[l][0];
            q[r][1]=a;
        }
        if(q[l][1]!=a+1)
        {
            r++;
            q[r][0]=a+1;
            q[r][1]=q[l][1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值