USACO 6.3.1 Fence Rails 01多背包问题(BS+IDDFS)

RAG中的Chunking实战:语义单元封装与15种工程化切分技术 在检索增强生成(RAG)系统中,chunking并非简单的文本分段,而是面向语义完整性、上下文锚定与检索友好性的关键预处理环节。其核心原理在于将原始文档转化为具备命题结构、可追溯元信息和向量表征鲁棒性的语义单元。技术价值体现在显著提升recall@5与QA准确率,避免因切分失当导致的关键条件断裂、术语割裂或逻辑链丢失。典型应用场景覆盖法律条款解析、技术文档问答、医疗指南检索及多模态手册理解等。本文聚焦RAG落地中最易被低估却影响最大的chunking工程实践,系统梳理15种可组合、可嵌套的切分策略,并深度结 阅读详情

http://train.usaco.org/usacoprob2?a=NaWWtjt80VA&S=fence8

题目大意:有N(1-50)块原木,要切成R(1-1023)块长度(1-128)可重复的木板,并不一定所有的木板都能被切出来,求能够交货的最大木板数量


错误想法:我一开始正着想觉得有种网络流的感觉,把每个原木看作一个有限容量的节点,和每个木板结点以无限容量的管道连接,木板结点在和汇点以容量为一的管道连接,然后求最大流。但是发现有两个问题:①木板结点必须被充满才可以被计数 ②多个原木结点不能流入同一个木板结点(不能拼接) 感觉这样一来网络流的特性都不对了,于是我放弃了思考!去看了官方提示


题目模型:

原来是需要反着思考,不是用原木去切木板,而是用木板去填充原木,这样一来就成了01多背包问题,但是没学过啊这种高级的背包,我依稀记得大主教有在数据结构习题课上教过用堆实现的方法,但是我在网上没有查到去群里问也没人告诉我,所以我只好老老实实地去想提示中说的IDDFS+剪枝的方法。

※关于IDDFS(iterative deepening depth-first search)可参考维基百科:感觉上就是带有额外迭代参数的DFS

看了这个之后我就想不明白了,因为这个额外的深度参数我不知道他有什么用,因为我们要找的是最多的木板数量,而且某一深度的DFS结果并不能给后来的DFS提供信息,不管怎么样这个迭代参数都要运行到最大。其实我一开始连这个参数该怎么搞应该代表什么都不明白,知道他代表木板数还是看了别人的题解之后  

于是我放弃了思考


整体思路:

参考链接:https://www.cnblogs.com/albert7xie/p/5733061.html

看了别人的题解我才明白了,我忽视了一个隐藏的性质,那就是最优解k必然可以用最小的k根木板满足,而这是显然的,如此一来,我们只要将木板排序,他就具有了二分性(前k小的木板能否全满足),二分的做法就类似于之前在数据结构课的作业里做过的跳石头一样

这样也同时解决了我对于IDDFS中迭代参数的问题,这个迭代参数代表了当前DFS的搜索深度,他不一定是线性增加的,它可以随便怎么搞其实,他只是反应了当前尝试的解的一个性质,所以这个IDDFS其实可以分解成ID+DFS,ID就是迭代参数可以描述解的优劣性(是我们选择解的条件),DFS是搜索过程,判断当前参数描述的解是否存在,之所以是DFS是因为每一个决策的分支太多,BFS做不了

※当然这里的二分是左开右闭的(小于等于lo的解是可行的,大于hi的解是不可行的),因此在确定mid的时候要加一(至于什么时候要加一,我个人的判断方法是要保证每次迭代之后待搜索范围都必须缩小,因为通过判断在移动边界时两个边界的异动情况可以确定)


剪枝操作:

当然这道题还没有结束,提示里都讲了要剪枝那么裸的DFS当然不可能过,到这里我已经连思考的动力都没有了,直接看了别人的题解(还想了很久才理解,淦)。一共有三种主要的剪枝操作:

①原木由大到小排序,由大到小尝试

②当下一块木板与当前木板大小相同时,从当前尝试到的原木开始尝试

③记录原木无效长度(剩余长度小于最小的木板,属于边角料)总和,当大于应当剩余长度(原木总长减去当前二分条件下木板长度总和)时,当前搜索无解

操作原理:

关于①:emmm不知道为什么,反正肯定不会影响答案的正确性,而且要改的话代码要改比较多我就没实验

关于②:很容易理解(呸,明明自己一开始想都想不明白),因为两块木板长度相同,所以在排序的时候谁在前谁在后其实都无所谓,如果下一块木板还是从头开始尝试的话它的搜索与当前木板之前已经做过的搜索是等价的,而搜索的次序已经表明了这些搜索是无效的。而且我还以为这只是追求0.00的优化,没想到如果没有这个处理竟然会超时


关于③:很明显(呸),在迭代参数确定的情况下所采用的木板的长度是固定的,因此其剩余的原木的长度也是固定的,当无效长度大于剩余长度时,解显然是不存在的(这个剪枝在采用的木板总长相比原木长度较长时比较实用)。当然,不用这个剪枝会超时,但是不像原博主说的是个强力剪枝,因为能苟过的点比上一个还多仅仅一个



概括下来就是:用二分的方法枚举描述解的参数,用DFS判断当前解是否可行,而参数和解的可行性是满足二分性的

代码如下:

/*
ID: frontie1
TASK: fence8
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int N, R;
int wood[55], need[1025];
int tot = 0, space;
int sum[1024];
int mid; //used both in DFS() and BS()

bool DFS(int dep, int pos)
{
    if(dep == 0) return true;
    if(space > tot-sum[mid]) return false; //too much space wasted
    for(int i = pos; i <= N; ++i){
        if(wood[i] >= need[dep]){
            wood[i] -= need[dep];
            if(wood[i] < need[1]) space += wood[i];
            bool flag = false;
            if(need[dep-1] == need[dep]) flag = DFS(dep-1, i);
            else flag = DFS(dep-1, 1);
            //backtrack, mind the order!
            if(wood[i] < need[1]) space -= wood[i];
            wood[i] += need[dep];
            if(flag) return true;
        }
    }
    return false;
}

int BS(int lo, int hi)
{
    while(lo < hi){
        mid = ((lo+hi) >> 1)+1;
        space = 0;  //each time initiate
        if(DFS(mid, 1)) lo = mid;
        else hi = mid-1;
    }
    return lo;
}

bool cmp(int a, int b)
{
    return (a > b);
}

int main()
{
    freopen("fence8.in", "r", stdin);
    freopen("fence8.out", "w", stdout);

    cin >> N;
    for(int i = 1; i <= N; ++i){
        cin >> wood[i];
        tot += wood[i];
    }
    cin >> R;
    for(int i = 1; i <= R; ++i){
        cin >> need[i];
    }
    sort(wood+1, wood+N+1,cmp);
    sort(need+1, need+R+1);

    for(int i = 1; i <= R; ++i){
        sum[i] = sum[i-1] + need[i];
    }

    cout << BS(0, R) << endl;

    return 0;
}


注意:除了上面的思路外,我一开始写回溯的时候还颠倒了次序(导致样例输出了6),这种细节问题还是太不小心了

还有一点:原来sort的两个参数是左闭右开的,淦


面板数据分析中的随机前沿软件FRONTIER Version 4.1应用 随机前沿模型是一种用于评估单位效率的统计方法。它考虑了输入和输出的随机性,允许我们在效率评估中引入不确定性。随机前沿模型通常用于评估生产单位、金融机构、医院等各种类型的决策单元的效率。FRONTIER是一个广泛使用的随机前沿分析软件,具有用户友好的界面和强大的功能。它提供了估计效率、前沿分析和模型比较的工具,使用户能够深入研究单位的效率和绩效。面板数据是一种包含多个单位(通常是时间序列数据)的数据类型,可以用于分析单位在不同时间点的变化和效率。 阅读详情

相关推荐

随机前沿软件FRONTIER Version4.1在面板数据中的应用

随机前沿面软件FRONTIER Version4.1 设置为零,进行Grid搜索。 3)DFP QN算法得到最后的极大似然估计值。 格点搜索:以 值作为搜索参数空间,格点为0.1,可以在FRONT41.00中进行调整。迭代优化参数也可以在FRONT41.00中调整。 FRONTIER Version4.1可以估计CD函数和超越对数生产函数。 1)CD生产函数,截面数据,半正态分布; 2)超...

wjyxld的博客 9099

[USACO]Fence Rails

Fence RailsBurch, Kolstad, and SchrijversFarmer John is trying to erect a fence around part of his field. He has decided on the shape of the fence and has even already installed the posts, but he's ha...

weixin_30919235的博客 282

FRONTIER4.1

DEA FRONTIER 4.1软件以及操作指南

USACO 6.3 Fence Rails(一道纯剪枝应用)

Fence RailsBurch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of his field. He has decided on the shape of the fence and has even already installed the posts, but ...

weixin_30291791的博客 208

FRONTIER4.1--随机前沿分析

FRONTIER4.1--随机前沿分析-SFA

Frontier4.1软件用法 ppt 教学视频集合.rar

Frontier是一款专门用于完成随机前沿分析的软件,它可以用最大似然法估计随机前沿成本模型(Stochastic Frontier Cost Model)和随机前沿生产模型(Stochastic Frontier Production Model)。本文主要介绍SFA的专用分析工具 Frontier4.1的大致用法。主要来自英文的说明,以方便读者

usaco 4.1 Fence Rails 剪枝

 多维背包问题,不能用dp,因为n 1)对rail和board排序,对于不同长度的rail,一定是取长度小的rail比较划算,所以我们取前k个rail处理这里 sum(rail,k) sum(board) 2)充分利用题目条件:因为每个rail最长只有128,而rail可能会有1000,所以肯定有很多rail的长度相等,对于这些rail,我们只需要枚举一个下界即可,这样可以免去很多重

Ben的专栏 1267

DEA FRONTIER 4.1操作说明及软件

数据包络分析软件 Save money by identifying efficiency improvements 实时的效率分析 使用Frontier Analyst可以增加生产效能的获利,它提供您了解如何管理您的营业单位和改进效能,Frontier Analyst使用一种被称为 “数据包络分析” (Data Envelopment Analysis, DEA) 的方法,有时被称为比较性能的评价或同侪本位分析(peer based analysis),去分析有相似功能商业单位的相对性能,而非只是单纯的财物标准分析。 Frontier Analyst 现今运用在很多营业机构里,范围从小型企业到跨国际企业,包含零售商、总经销商、银行、公家机关和医疗诊所等等以商业为基础的企业。

【免费下载】 DEA FRONTIER 4.1 软件及操作指南

DEA FRONTIER 4.1 软件及操作指南 【下载地址】DEAFRONTIER4.1软件及操作指南 本仓库提供DEA FRONTIER 4.1软件及其操作指南的下载资源。DEA FRONTIER 4.1是一款用于数据包络分析(Data Envelopment Analysis, DEA)的强大工具,广泛应用于效率评...

gitblog_09716的博客 2393

旅行青蛙破解汉化教程——蹭个热度

汉化破解版资源(无尽三叶草与点券): https://github.com/wisdombyzf/lxqw/blob/master/lxqw_zf.apk 截图: 破解方法: 工具: 1,APKIDE https://www.pd521.com/thread-818-1-2.html 2,dnspy https://down.52pojie.

github_38838414的博客 3785

库卡C4控制柜首次上电

本文详细介绍了如何使新购的库卡机器人(以KRC4为例)达到正常运行状态。首先,必须正确连接机器人尾部和控制柜底部的各种线缆,包括动力线缆、编码器线、SmartPad线和安全回路线缆等。特别强调,电源线和蓄电池线的正确连接至关重要,避免硬插以防损坏。此外,机器人与控制柜之间需连接地线以防止漏电。文章还提到,开机前需检查电机保护器开关,并确保所有线路连接正确。开机后,需提升用户权限至安全维护员级别,通过系统配置激活安全相关通讯参数。最后,文章详细解释了X11安全回路的接线方式,强调双通道信号的重要性,并提醒不同

2202_75959322的博客 1838

【免费下载】 DEA FRONTIER 4.1:数据包络分析的强大工具

DEA FRONTIER 4.1:数据包络分析的强大工具 【下载地址】DEAFRONTIER4.1软件及操作指南 本仓库提供DEA FRONTIER 4.1软件及其操作指南的下载资源。DEA FRONTIER 4.1是一款用于数据包络分析(Data Envelopment Analysis, DEA)的强大工具,广泛应用...

gitblog_09765的博客 992

LAN8720芯片硬件设计避坑指南:从晶振选择到PHY地址配置的5个关键细节

本文深入解析LAN8720以太网PHY芯片硬件设计的五个关键细节,涵盖晶振模式选择、PHY地址配置、复位电路设计、电源滤波与接口布线。重点阐述了REF_CLK Out与REF_CLK In两种时钟模式的配置逻辑与应用场景,提供了避免通信失败与信号完整性问题的实战方案,是嵌入式网络硬件开发的实用避坑指南。

i1j2k的博客 514

【亲测免费】 DEA FRONTIER 4.1操作说明及软件

DEA FRONTIER 4.1操作说明及软件 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用DEA FRONTIER 4.1操作说明及软件资源包。本资源包致力于帮助用户通过数据包络分析方法(Data Envelopment Analysis,简称DEA),实现企业效率的实时分析与优化。 资源描述 本资源包含的DEA FRONTIER 4.1软件及操作说明,旨在帮助用户...

gitblog_06744的博客 474

网络变更:APIC 节点替换

Fabric Name,Controller ID,TEP Address Pool 等信息必须相同;如果故障设备是 APIC1 还需要重新配置管理密码。此过程可能需要 10 分钟左右,在此期间目标 APIC 可能在 Available/Unavailable 状态翻滚。APIC 获取 TEP 地址后,进入 fully-fit。通过 CLI 以及配置的密码登录目标 APIC。

m0_54931486的博客 321

【推荐100个unity插件】性能极高的逼真爆炸、火焰和烟雾效果——UNI VFX

这是一篇关于Unity中高性能GPU粒子特效插件UNI VFX的使用指南。文章介绍了该插件提供逼真的爆炸、火焰和烟雾效果,支持URP和HDRP渲染管线。主要内容包括:插件安装方法(需预先安装Visual Effect Graph和Shader Graph包)、事件系统使用方法(如create/loop/stop等事件控制)、特效分类(自动结束型和持续型特效)、检视面板配置技巧以及性能优化建议(特别提醒灯光特效对性能的影响较大)。文末还推荐了多个Unity开发相关的专栏内容。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1490

【亲测免费】 Frontier4.1软件用法PPT教学视频集合

Frontier4.1软件用法PPT教学视频集合 去发现同类优质开源项目:https://gitcode.com/ 此压缩文件包含了一系列Frontier4.1软件用法的教学视频,以PPT形式展现。Frontier软件被广泛应用于随机前沿分析(Stochastic Frontier Analysis, SFA),它能够帮助用户使用最大似然法估计随机前沿成本模型(Stochastic Frontie...

gitblog_06747的博客 451

【Simulink教程案例7】基于Simulink的滑模控制器设计与实现

欢迎订阅滑膜控制是一种变结构控制策略,其和常规控制方法的主要区别在于控制的不连续性,即一种使系统结构随时间变化的开关特性。所以,滑膜控制器也叫做变结构控制器,其本质是一类特殊的非线性控制器,并且这种非线性为不连续性。滑膜控制器和其他控制方式最大的区别在于其结构的不固定性,在其工作过程中,系统当前的状态会发生变化,使得系统按照预先设置的“滑动模态”的状态轨迹运动。正是由于这个特点,滑膜控制器具有快速响应的优点。滑模控制的基本定义如下所示:1).穿越切换面上的某个点;2).从切换面上的某个点离开;

FPGA/MATLAB学习教程/源码/项目合作开发 3241

Frontier4.1简介

Frontier 是一款专门用于完成随机前沿分析的软件,它可以用最大似然法估计随机前沿成本模型(Stochastic Frontier Cost Model) 和随机前沿生产模型(Stochastic Frontier Production Model)。  在这里,我们主要简单介绍一下Frontier的使用方法,暂时不对随机前沿这个方法做详细的展开。  程序解包后,最主要的是4个文件,F

塔里木博客 1万+

10、使用Ray Serve实现微服务与模型部署

本文深入介绍了如何使用Ray Serve实现微服务与机器学习模型的高效部署。从基础的部署定义到复杂的模型服务场景,涵盖部署架构、HTTP与Python调用、资源配置、FastAPI集成、金丝雀发布策略及实际应用流程。文章还探讨了模型服务的关键需求如灵活性、批处理、硬件优化和可扩展性,并展示了Ray Serve如何满足这些要求。最后提供了常见问题解决方案与未来发展方向,帮助开发者构建高性能、易维护的模型服务平台。

blue42的博客 175

USB驱动(URB)

本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。

m0_49476241的博客 915

FRONTIER4.1--随机前沿分析资源文件介绍

FRONTIER4.1--随机前沿分析资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ FRONTIER4.1是随机前沿分析领域的强大工具,专注于经济效率研究。 项目介绍 FRONTIER4.1随机前沿分析资源文件下载仓库,为研究者和经济分析专业人士提供了一站式的工具支持。这个项目旨在帮助用户轻松开展随机前沿分析,解决生产效率、成本效益等经济问题。通过该仓库,用户可以...

gitblog_06704的博客 516

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

USACO 4.1 Fence Rails (fence8)

/* 既然要装下尽可能多的物品,那么就应该先选入小的物品。所以,先把物品按照重量递增排序。那么: 1)如果前k物品不能装入背包,那么即使把其中一个物品P换成k+1~R中的一个物品Q, 由于Q的重量大于P,因此也绝对不可能成功装入背包。 2)如果前k个物品可以装入背包,那么前k-1个物品也一定能装入背包。 3)如果前k个物品不能装入背包,那么前k+1个物品也一定不能装入背包。 这样,一个最值问

Hello World! 2239

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

usaco6.3.1 Fence Rails

一 原题 Fence Rails Burch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of his field. He has decided on the shape of the fence and has even already installed the posts,

max_kibble的博客 322

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

背包问题详解(01背包,完全背包,多重背包,分组背包)

有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0

走在努力路上的自己的博客 6万+
上一篇: USACO 6.2.3 Shaping Regions
下一篇: USACO 6.3.2 Cryptcowgraphy 剪枝
Frontier_Setter
博客等级 码龄10年 2粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值