洛谷P2329 栅栏 [SCOI2005] 搜索
正解:搜索
解题报告:
先放下传送门!
首先说下爆搜趴,就直接枚每个需求是否被满足以及如果满足切哪个板子,随便加个最优性剪枝,似乎是有80pts
然后思考优化
首先显然尽量满足需求比较小的,显然如果能满足边长大的替换成边长小的也欧克,所以先对需求都排个序,就不用考虑是否满足了一定都满足
这样就可以发现变成了一个可二分的问题?然后爆搜check一下就好
然后check中的剪枝我港下QAQ
首先可以记录一个浪费了多少木材,如果浪费的加上至少要用的木材数量大于已有数量了,显然不成立
考虑怎么样会浪费?就考虑对需求的木材从大往小匹配,如果我拥有的木材有一块已经小于最小的那块了,显然就不适用于任何一块木材,就浪费了
然后如果我有多个需求是相同的,在满足了第一个需求之后就不要再从第一块拥有的开始搜索了,显然是一样的,就继续从上一次匹配的木材继续搜就好
综上!这题做完辣!放个代码就欧克了趴?
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ll i=x;i<=y;++i)
#define my(i,x,y) for(ll i=x;i>=y;--i) const int N=+;
int m,n,a[N],b[N],sum[N],tot,summ; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
bool dfs(ri nw,ri lst)
{
if(!nw)return true;if(summ+sum[nw]>tot)return false;
rp(i,lst,m)
if(a[i]>=b[nw])
{
a[i]-=b[nw];if(a[i]<b[])summ+=a[i];
rb flg=;if(b[nw]==b[nw-])flg=dfs(nw-,i);else flg=dfs(nw-,);
if(a[i]<b[])summ-=a[i];a[i]+=b[nw];
if(flg)return true;
}
return false;
} int main()
{
m=read();rp(i,,m)tot+=(a[i]=read());sort(a+,a++m);
n=read();rp(i,,n)b[i]=read();sort(b+,b++n);rp(i,,n)sum[i]=sum[i-]+b[i];while(sum[n]>tot)--n;
ri l=,r=n;while(l<r){ri mid=(l+r)>>;if(dfs(mid+,))l=mid+;else r=mid;}printf("%d\n",l);
return ;
}
这儿是代码QAQ
洛谷P2329 栅栏 [SCOI2005] 搜索的更多相关文章
- 洛谷 2921 记忆化搜索 tarjan 基环外向树
洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...
- 洛谷P1074 靶形数独 [搜索]
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...
- 洛谷P1896||bzoj1087 [SCOI2005]互不侵犯
bzoj1087 洛谷P1896 想了很久,太久没做状压都已经不会了... 状压每一行就好了 #include<cstdio> #include<algorithm> #inc ...
- 洛谷 P2329 [SCOI2005]栅栏 解题报告
P2329 [SCOI2005]栅栏 题目描述 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了 ...
- 【洛谷2324】[SCOI2005]骑士精神 IDA*
[SCOI2005]骑士精神 描述 在一个\(5×5\)的棋盘上有\(12\)个白色的骑士和\(12\)个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为 ...
- 洛谷 画栅栏Painting the Fence 解题报告
P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ...
- 【洛谷P1896【SCOI2005】】互不侵犯King
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出格式 输入格式: 只有一行,包 ...
- 洛谷P1528 切蛋糕 [搜索,二分答案]
题目传送门 切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把刀 ...
- 洛谷P1120 小木棍 [搜索]
题目传送门 题目描述乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍 ...
随机推荐
- Ansible and FileBeta
使用Ansible通过ssh批量读取和修改Client设备 1. 安装ansible工具 apt-get install ansible 2. 添加需要访问的client信息 ansible配置文件如 ...
- git push origin master和git push有什么区别?
1.master是主分支,还可以建一些其他的分支用于开发.2.git push origin master的意思就是上传本地当前分支代码到master分支.git push是上传本地所有分支代码到远程 ...
- CEO退休
早上刚来公司就收到群发邮件,说CEO退休了,在公司服务了22年.以后还是会part time做vice chairman.其实在公司也没打过几次照面...就知道是个和善的老人,祝他退休生活幸福! 我的 ...
- Linux 下用 valgrind 查找内存泄漏小例子
1.安装 valgrind yum install valgrind 2.测试用例 main.cpp #include <iostream> using namespace std; st ...
- QT开发环境安装配置教程
QT开发环境安装配置教程 分类: QT2012-11-29 23:31 35366人阅读 评论(12) 收藏 举报 Linux版的直接在ubutnu软件中心输入QT,安装响应的Designer,Cre ...
- js中的hasOwnProperty
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- umi怎么去添加配置式路由
今天在学习umi,他的路由机制非常的方便,但是在学到配置式路由的时候,看官方文档里面一笔带过: 对于我这种小萌新来说,有点懵,我需要把配置文件放到哪里呢?经过一番研究,发现它是放在根目录的.umirc ...
- 正确停掉 expdp 或 impdp
1.查看视图dba_datapump_jobs SQL> set line 200 SQL> select job_name,state from dba_datapump_jobs; J ...
- 网络通信协议三之TCP/IP模型详解
TCP/IP模型 注:PDU:Protocol Date Unit:表示对等层之间传递的数据单位 TCP:Transmission Control Protocol:传输控制协议 UDP:User D ...
- C需要中的static
转载 详细分析一下static关键字在编写程序时有的三大类用法: 一,static全局变量 我们知道,一个进程在内存中的布局如图1所示: 其中.text段保存进程所执行的程序二进制文件,.data段保 ...