传送门

Luogu

解题思路

我们有很显然的这样一条贪心思路:

首先满足长度短的木板,因为如果可以满足长的也肯定可以满足短的,而且可能满足更多。

那么我们就会有这样的思路:枚举一条木板由哪条木板切割而来。

然后我们就可以考虑一堆剪枝了:

  1. 如果当前长木板长度\(-\)浪费的木板长度\(<\)所需要的木板长度,剪掉;
  2. 如果当前需要满足的木板和前一块长度相同,那么就去dfs前一块,因为如果满足不了第 \(i\) 块,那么第 \(i-1\) 块也一定不行 。
  3. 二分答案减少搜索范围 不知道算不算剪枝

细节注意事项

  • 爆搜题,你们懂得。。。

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
} const int _ = 51;
const int __ = 1002; int m, sa, a[_];
int n, b[__], sb[__];
int aa[_], mid, s; inline int dfs(int x, int last) {
if (x <= 0) return 1;
if (sa - s < sb[mid]) return 0;
for (rg int i = last; i <= m; ++i) {
if (aa[i] >= b[x]) {
aa[i] -= b[x];
if (aa[i] < b[1]) s += aa[i];
if (b[x] == b[x - 1]) {
if (dfs(x - 1, i)) return 1;
} else if (dfs(x - 1, 1)) return 1;
if (aa[i] < b[1]) s -= aa[i];
aa[i] += b[x];
}
}
return 0;
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
read(m);
for (rg int i = 1; i <= m; ++i) read(a[i]), sa += a[i];
read(n);
for (rg int i = 1; i <= n; ++i) read(b[i]);
sort(b + 1, b + n + 1);
for (rg int i = 1; i <= n; ++i) sb[i] = sb[i - 1] + b[i];
while (sb[n] > sa) --n;
int l = 0, r = n;
while (l < r) {
memcpy(aa, a, sizeof (int) * (m + 1)), s = 0;
mid = (l + r + 1) >> 1;
if (dfs(mid, 1)) l = mid;
else r = mid - 1;
}
printf("%d\n", l);
return 0;
}

完结撒花 \(qwq\)

「SCOI2005」栅栏的更多相关文章

  1. 「SCOI2005」王室联邦

    「SCOI2005」王室联邦 传送门 树分块. 考虑把树,按照节点个数每 \(B\) 个分块,把块顶作为省会. 这是具体证明 参考代码: #include <cstdio> #define ...

  2. 「SCOI2005」互不侵犯 (状压DP)

    题目链接 在\(N\times N\) 的棋盘里面放 \(K\)个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共\(8\) 个格子 ...

  3. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  4. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  5. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  6. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  7. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  8. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  9. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

随机推荐

  1. Kubernetes的控制器之Deployment的定义

    Deploy 的控制器定义参数介绍 [root@master manifests]# kubectl explain deploy KIND: Deployment VERSION: extensio ...

  2. 寒假pta一

    打印沙漏 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐 ...

  3. JavaScript相关

    用文本编辑软件和浏览器就能开发和调试JavaScript代码 Node.js  在浏览器之外(服务器端)独立运行Ja¬vaScript代码的Node.js于2009年问世,一个独立的JavaScrip ...

  4. 【PAT甲级】1044 Shopping in Mars (25 分)(前缀和,双指针)

    题意: 输入一个正整数N和M(N<=1e5,M<=1e8),接下来输入N个正整数(<=1e3),按照升序输出"i-j",i~j的和等于M或者是最小的大于M的数段. ...

  5. Mac下MyEclipse安装及破解

    一.安装MyEclipse 去 官网下载MyEclipse ,我这里下载的是最新版MyEclipse 2017 CI 5,安装之后不要立即打开,不然会导致后面破解失败. 二.破解 1.下载破解文件,亲 ...

  6. python 之并发编程更新版进程池与进程池比较与回调函数

    一.更新版进程池与进程池比较 from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor import os, tim ...

  7. SpringBoot与Lombok

    Lombok 在项目中使用Lombok可以减少很多重复代码的书写.具体详细资料可以浏览 https://blog.csdn.net/motui/article/details/79012846 一.引 ...

  8. Preparing for the interview of FLAG and USDA

    7,Dynamic Programming 1,Unique Paths A robot is located at the top-left corner of a m x n grid (mark ...

  9. selenium webdriver 屏幕滚动

    //山寨法 String setscroll = "document.documentElement.scrollTop=100"; JavascriptExecutor jse= ...

  10. 3 JavaScript正则表达式

    正则表达式:Regular(有规则的) Expression 正则表达式是由一个字符序列形成的搜索模式,可用于文本搜索和文本替换 常见于字符串的search和replace方法 var str = & ...