uva--103Stacking Boxes +dp

本文介绍了一个N维几何体嵌套问题的解决思路,该问题允许几何体任意扭曲。通过排序和递归打印的方法实现了问题求解,并提供了完整的C++代码实现。

题意:

    其实就是把矩形嵌套扩大到了n维,但是规定这个n维的几何体是可以任意扭曲的。

思路:

   就是按照矩形嵌套问题的思路,不过判定是否可以嵌套的时候,我们直接都排一下序就判断了(因为是可以任意扭曲的)。还有就是需要打印出整个序列,这里可以借用小白书上的思路,递归进行打印。


代码如下:


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int st[50][15];
int map[50][50],d[50],n,m;

int dp(int i)
{
    if(d[i]>0) return d[i];
    d[i]=1;
    for(int j=0;j<n;j++)
        if(map[i][j])
        {
            int t=dp(j)+1;
            if(d[i]<t)
                d[i]=t;
        }
    return d[i];
}

void print(int i)
{
    printf("%d ",i+1);
    for(int j=0;j<n;j++)
        if(d[j]==d[i]-1&&map[i][j])
        {
             print(j);
             break;
        }
}

int check(int a[],int b[])
{
    for(int i=0;i<m;i++)
        if(a[i]>=b[i])
           return 0;
    return 1;
}

void Init()
{
    memset(d,0,sizeof(d));
    memset(map,0,sizeof(map));
}

int main()
{
    int i,j;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                scanf("%d",&st[i][j]);
        Init();
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            {
                int c[50],d[50];
                for(int k=0;k<m;k++)
                {
                    c[k]=st[j][k];
                    d[k]=st[i][k];
                }
                sort(c,c+m);
                sort(d,d+m);
                if(check(d,c))
                   map[i][j]=1;
            }
        int ans=0,k;
        for(i=0;i<n;i++)
        {
            int t=dp(i);
            if(t>ans)
            {
                ans=t;
                k=i;
            }
        }
        printf("%d\n",ans);
        print(k);
        printf("\n");
    }
  return 0;
}



### LightGBM-LSTM Stacking 集成方法分析 #### 优点 Stacking 作为一种层次化的集成学习方法,能够有效融合 LightGBM 和 LSTM 这类不同建模范式的模型。LightGBM 擅长处理结构化数据,具备高效、低内存消耗和快速训练的优势,而 LSTM 在处理时间序列依赖关系方面表现优异,适用于具有时序特性的任务。通过将这两种模型的预测结果作为输入特征,训练一个元学习器(如随机森林、逻辑回归等),可以进一步提升模型的泛化能力和预测精度。这种集成方式在多输出回归任务中尤其有效,例如非洲土壤属性预测项目中,就采用了多模型融合策略来提升模型鲁棒性和准确性[^3]。 此外,Stacking 的灵活性在于可以引入多个基模型,并通过元模型自动学习它们的最优组合方式,从而避免手动设定权重所带来的主观偏差。 #### 缺点 尽管 Stacking 在提升模型性能方面表现出色,但也存在一定的局限性。首先,模型复杂度显著增加,不仅需要训练多个基模型,还需额外训练元学习器,导致计算资源消耗较大。尤其在 LightGBM 与 LSTM 并行训练时,由于 LSTM 的训练周期较长,整体训练时间可能显著增加。其次,Stacking 对数据划分和元模型选择敏感,若训练集划分不均或元模型选择不当,可能导致过拟合或泛化能力下降[^1]。 此外,Stacking 的超参数调优过程更为复杂,例如基模型的参数、元模型的学习率、特征组合方式等,均需进行系统优化,增加了模型调参的难度。 #### 应用场景 LightGBM-LSTM Stacking 集成方法适用于结构化数据与时间序列数据混合的任务。例如在工单分配、设备故障预测等场景中,数据可能同时包含静态特征(如设备型号、历史故障次数)和动态特征(如传感器时序数据)。通过 LightGBM 提取静态特征的高阶关系,LSTM 捕捉时序模式,再通过元模型融合两者输出,可有效提升预测准确性。 在非洲土壤属性预测任务中,也采用了类似的多模型融合策略,结合不同回归模型的预测结果,构建出更稳健的预测系统。该方法同样适用于金融预测、工业设备状态监测、智能运维等需要融合多源异构数据的场景。 #### 示例代码:LightGBM-LSTM Stacking 融合 ```python from sklearn.ensemble import RandomForestRegressor import numpy as np # 假设 lightgbm_pred 和 lstm_pred 是两个模型在验证集上的预测结果 X_stack = np.column_stack((lightgbm_pred, lstm_pred)) y_true = test_labels # 使用随机森林作为元学习器 meta_model = RandomForestRegressor() meta_model.fit(X_stack, y_true) final_pred = meta_model.predict(X_stack) ``` 上述代码展示了如何将 LightGBM 和 LSTM 的预测结果进行 Stacking 融合,并使用随机森林作为元学习器提升最终预测性能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值