USACO: Fence Rails

USACO4.1.2Fence Rails栅栏的木料解题报告 描述: 农民John准备建一个栅栏来围住他的牧场。他已经确定了栅栏的形状,但是他在木料方面有些问题。当地的杂货储存商扔给John一些木板,而John必须从这些木板中找出尽可能多所需的木料。 当然,John可以切木板。因此,一个9英尺的木板可以切成一个5英尺和一个4英尺的木料 (当然也能切成3个3英尺的,等等)。John有一把(完美的)梦之锯,因此他在切木料时,不会有木料的损失。 阅读详情
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, but he's having a problem with the rails. The local lumber store has dropped off boards of varying lengths; Farmer John must create as many of the rails he needs from the supplied boards.

Of course, Farmer John can cut the boards, so a 9 foot board can be cut into a 5 foot rail and a 4 foot rail (or three 3 foot rails, etc.). Farmer John has an `ideal saw', so ignore the `kerf' (distance lost during sawing); presume that perfect cuts can be made.

The lengths required for the rails might or might not include duplicates (e.g., a three foot rail and also another three foot rail might both be required). There is no need to manufacture more rails (or more of any kind of rail) than called for the list of required rails.

PROGRAM NAME: fence8

INPUT FORMAT

Line 1: N (1 <= N <= 50), the number of boards
Line 2..N+1: N lines, each containing a single integer that represents the length of one supplied board
Line N+2: R (1 <= R <= 1023), the number of rails
Line N+3..N+R+1: R lines, each containing a single integer (1 <= ri <= 128) that represents the length of a single required fence rail

SAMPLE INPUT (file fence8.in)

4
30
40
50
25
10
15
16
17
18
19
20
21
25
24
30

OUTPUT FORMAT

A single integer on a line that is the total number of fence rails that can be cut from the supplied boards. Of course, it might not be possible to cut all the possible rails from the given boards.

SAMPLE OUTPUT (file fence8.out)

7

HINTS (use them carefully!)

       HINT 1  

 

解题思路:

此题用到的主要算法是迭代深搜,所谓迭代深搜的概念其实我也不能完全把握,只能把这个算法描述为“类似广搜和深搜的一种结合体”,具体就体现在函数中对自己的递归调用是放在一个for循环里面的,而后面的搜索要不要执行是由前面搜索出来的结果决定的。

这种算法的适用性可以用这个题目来记住:搜索深度无法确定,但是按照某一个特定的顺序搜索,搜出的第一个结果就是要求的最优解。

 

这个题目的做法就是,把要切成的fails长度升序排列,原材料boards降序排列,然后考察第0~i个fails是否可以从这些boards中切出来,这个地方就用到了迭代深搜。

注意搜索中保留和还原boards的状态非常重要:假如当前的裁切方案可行,在board被裁切后的状态会被保留下来,提供给更深一层的搜索使用,而一旦下层搜索找不到任何可行方案,则board会被还原,不会影响到下一步搜索的正确性

 

最后,写这个程序我参考了不少别人的代码,但是多是高手写的比较晦涩难懂,为了我以后复习用我还是认认真真写了一个注释版的,同时把可能想到的各种优化都用上了,选排,桶排,二分搜索,ID_DFS本来只需要一个参数,但是考虑到fails势必存在很多长度一样的,我又加了一个参数lwIdx来表示从哪一个boards开始搜索裁切方案,在多个fails重复的情况下可以避免一些重复判断,还有很多细微的剪枝技巧,比如不要在长度相同的boards上重复判断是否可以裁切(判断一次就够了),比如程序中写的几种easy case。

 

代码:

Usaco Training Section 6.3 Fence Rails Fence Rails 栅栏的木料 农民John 准备建一个栅栏来围住他的牧场.他已经确定了栅栏的形状,但是他在木料方面有些 问题.当地的杂货储存商扔给John 一些木板,而John 必须从这些木板中找出尽可能多所需的木料. 当然,John 可以切木板.因此,一个9 英尺的木板可以切成一个5 英尺和一个4 英尺的木料 (当然也能切成3 个3 英尺的,等等).John 有一把梦幻之锯,因此他在切木料... 阅读详情

相关推荐

bert-ini:一种基于bert的实体对齐交互模型

本次分享一项来自IJCAI-20的实体对齐工作,该工作提出了一种不同于以往的采用图结构信息进行实体对齐的技术方案,该方案取得了当时的最好效果;不仅如此,模型本身的对齐效率在该项工作中也被考虑,实际工作中非常具备借鉴意义。

qq_33331424的博客 3150

USACO 4.1 Fence Rails

TASK: fence8 LANG: C++ Compiling... Compile: OK Executing... Test 1: TEST OK [0.000 secs, 3032 KB] Test 2: TEST OK [0.000 secs, 3032 KB] Test 3: TEST OK [0.000 secs, 3032 KB] ...

weixin_30767921的博客 138

pgpool-II安装部署

文章介绍了pgpool-II的核心功能、架构组成以及实际部署的关键配置步骤

weixin_41690116的博客 1422

[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

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1124

【低空经济】无人机充电站设计方案

随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;

2959

USACO Fence Rails 解题报告

没什么好说的。感觉不会再爱了。 /* ID: thestor1 LANG: C++ TASK: fence8 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #incl

thestoryofsnow的专栏 829

ESP32-CAM搭建Arduino及简单使用

配置环境 方法一 文件 → 首选项 http://wechat.doit.am/package_esp8266com_index.json https://dl.espressif.com/dl/package_esp32_index.json 工具 → 开发板 → 开发板管理器 等待安装 方法二 https://github.com/espressif/arduino-esp32 Arduino安装目录下,找到hardware文件夹 建立文件夹espressif,然后在里面再建立一个esp32文件夹

Ying的博客 2万+

usaco 4.1.2 Fence Rails 搜索剪枝

这个题是我做usaco第一个不看解题报告做不出来的题目。题目大意:有N根木料,和需要R根木板,我们就要判断最多可以用那些木料可以切出多少根木板。木料和木板的长度都可能是不同的。N 根据木板的长度小于128我们可以知道有很多种重复的木板长度是我们需要的,这里就是剪枝的关键所在了。我们当然知道是用深搜判断能否切出X根木板。我是一个一个木板搜,看看能不能满足要求。首先是判断最大的根数,然后递减的判断能不能满足条件。很容易证明能切出X根木板,就一定可以切出X小的木板,所以我们要先把木板排序,然后搜索。剪枝:1  如

mnlm1991的专栏 1170

YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

know_F0727的博客 190

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

USACO4.1 Fence rails DFSID

所有题在A不掉之前都是难题,而当你把它A掉后,它便成了水题,而在你A掉它之前,你永远不知道它有多水。 这道题,我最先想到的是DP,觉得就是一个典型背包问题,不过是背包多了一点而已,然而再仔细一想N=50便意味着50个背包,128^50的运算量,不用细算也知道这样的程序跑出来太阳都熄火了,所以这样的DP是走不通的。想到这个section的主题是讲搜索优化的,那就试试搜索吧,直接DFS加剪枝?嗯,想

sunny606的专栏 1307

基于Python的FTA协定内容爬虫实战:从数据抓取到智能分析

本文将详细介绍如何使用Python构建一个高效的FTA(自由贸易协定)内容爬虫,涵盖最新技术如Playwright、异步IO、智能解析等。通过本教程,您将学会如何从各类政府网站和国际组织平台抓取结构化FTA数据,并对其进行清洗、存储和分析。文章包含完整的代码实现和最佳实践指南,适合中高级Python开发者学习网络爬虫开发。

2201_76125261的博客 993

usaco4.12Fence Rails(迭代加深)

为了这题还去学了下迭代加深 回来还是不会写 只好参考各大神的代码及题解了 二分枚举最大可以切的块数 然后就是各种分析及优化 USACO题解里写了7个优化。。 问题分析 抽象一下就可以发现,算法的本质是多重背包问题。 补充:这题与破锣乐队都是多个背包,不可重复放物品。区别在于破锣乐队要有顺序,此题不需要,这样此题就必须要搜索才行。 单个背包的问题我们可以用DP解决,但是对于这种问题我们只...

weixin_30432007的博客 160

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

USACO Section 4.1 Fence Rails

题意: n个木头  m个木块  问: 任意的切木头  最终能得到多少个

House 860

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

usaco 4.1.2 Fence Rails栅栏的木料

<br />栅栏的木料<br />Time Limit:1000MS  Memory Limit:65536K<br />Total Submit:45 Accepted:7 <br />Description <br />农民John准备建一个栅栏来围住他的牧场。他已经确定了栅栏的形状,但是他在木料方面有些问题。当地的杂货储存商扔给John一些木板,而John必须从这些木板中找出尽可能多所需的木料。 <br />当然,John可以切木板。因此,一个9英尺的木板可以切成一个5英尺和一个4英尺的木料 (当然也

___简言 2143

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

USACO Section 4.1 Fence Rails(DFSID)

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 ...

angtongyou1893的博客 322

USACO SECTION 4.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, but he

572

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

usaco training 4.1.2 Fence Rails 题解

强大的搜索剪枝!

阿蒋的专栏 2126

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

http://train.usaco.org/usacoprob2?a=NaWWtjt80VA&amp;S=fence8题目大意:有N(1-50)块原木,要切成R(1-1023)块长度(1-128)可重复的木板,并不一定所有的木板都能被切出来,求能够交货的最大木板数量错误想法:我一开始正着想觉得有种网络流的感觉,把每个原木看作一个有限容量的节点,和每个木板结点以无限容量的管道连接,木板结点在和汇点...

Frontier_Setter的博客 730

USACO section 4.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, but h

nealgavin的专栏 796

USACO6.3.1 Fence Rails(fence8)

把原木和新木快排一遍,每次二分枚举可以切的木块数,再去验证。 验证时,设枚举的木块数为k。由贪心思想可知,我们挑前k小的新木来切割 一个特别关键的剪枝:统计切剩下的board(无法再切下rail)总和,这个值大于board总和减去rail总和,无解。 这个代码里写有解释,应该是很清楚的 /* ID:xsy97051 LANG:C++ PROG:fence8 */ #incl

xsy_victory的专栏 401
上一篇: USACO: Beef McNuggets
下一篇: USACO: Fence Loops
Geterns
博客等级 码龄17年 16粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值