洛谷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. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍 ...
随机推荐
- 【转】使用Log4Net进行日志记录
首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志系统所记录的信息为系统进行排错, ...
- Wifi 开放系统认证和共享密钥身份认证
记录开放系统认证和共享密钥认证的区别. 开放系统身份认证(open-systern authentication) 是802.11 要求必备的惟一方式. 由行动式工作站所发出的第一个帧被归类为auth ...
- Go语言_range(范围)理解
一.Go语言中的range Go 语言中 range 关键字用于 for循环中迭代数组(array).切片(slice).链表(channel)或集合(map)的元素: 在数组和切片中它返回元素的索引 ...
- IntelliJ IDEA下spring boot项目打包
Spring Boot自带Tomcat插件,可以直接编写启动类,开启Tomcat服务 springboot适合前后端分离,打成jar进行部署更合适 application.properties配置端口 ...
- PDF Transformer+与Transformer3.0功能对比
ABBYY PDF Transformer+是一个新的.全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...
- [IR] XPath for Search Query
XPath 1.0 XPath Containment Distributed Query Evaluation RE and DFA XPath 1.0 -- 在XML中的使用 XPath 语法: ...
- C#设计模式--状态模式
设计模式: 状态模式(State Pattern) 简单介绍: 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式. 在状态模式中,我们创建表示 ...
- Android 更改按钮样式 Button Styles
extends:http://stackoverflow.com/questions/26346727/android-material-design-button-styles I will a ...
- nginx+tomcat 下POST响应参数过大无法显示完整及文件下载服务遇到过大文件无法下载解决办法
在nginx里location里面设置 proxy_buffering off; 或者 proxy_buffering on; proxy_buffers 4 4k; proxy_busy_buffe ...
- Android超精准计步器开发-Dylan计步(申明:来源于网路)
Android超精准计步器开发-Dylan计步(申明:来源于网路) 拿来借鉴学习,向原创者... 地址:http://blog.csdn.net/linglongxin24/article/detai ...