【二分】【DFS剪枝】栅栏的木料

该博客介绍了一种利用二分搜索和深度优先搜索(DFS)剪枝策略来解决关于栅栏木料需求的问题。在二分过程中,通过DFS判断是否能合法满足木料需求,并进行了四种有效的剪枝策略,以避免超时。文章包含题目描述、样例输入/输出、解题思路和代码实现。
摘要由CSDN通过智能技术生成

题目描述

给出N个木块,每个木块有一个长度 a a a,可以被切成若干块长度不一的小木块,现在有M块木料需求,问这N块木块

样例输入

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

样例输出

7

思路

每次二分最终答案
验证就是靠dfs判断是否合法,但是要加上剪枝,要不然会TLE
剪枝:
1.满足不了最小的木料的木块都可以去掉
2.最大的木块都满足不了的木料也都可以去掉
3.木块总量达到不了木料的总量的情况是错的
4.搜索木块的时候,如果上一个木料和当前相同,可以从当前木块开始寻找(因为前面的木块都无法满足当前木料的需求

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

int ans = -1e9, n, r, tot;
int sum[1505], a[105], l[1505], c[105];

bool check(int x, int w, int la, int mid)
{
   </
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值