【bzoj1082】 SCOI2005—栅栏】的更多相关文章

1082: [SCOI2005]栅栏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2430  Solved: 1034[Submit][Status][Discuss] Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生…
1082: [SCOI2005]栅栏 题目:传送门 题解: 是不是一开始在想DP?本蒟蒻也是qwq,结果很nice的错了ORZ 正解:二分+搜索 我们可以先把两种木材都进行排序,那么如果需要的最大木材比可提供的最大木材还要大的话,那么可以直接舍弃这种需要的木材. 然后就可以进入二分,如果当前可以做贡献的提供木材加起来都没有前mid块需要木材大的话,很明显当前mid不ok 返回判断值再记录答案就好了,注意一些小细节的优化 代码: #include<cstdio> #include<cstr…
Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购 买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需 要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长 度为8和2的两个木板.你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰 最多能够得到多少他所需要的木板. Input 第一行为整数m(m<=…
题目大意: 有一些木材,可以没有浪费地将一根木材分成几块木板(比如长度为10的木板可以切成长度为8和2的两块木板).现在你希望得到一些长度的木板,问通过分割木材最多能得到几块想要的木板. 思路: 首先,长度短的木板一定比长度长的木板容易得到,因此若要得到最多的木板,它们必定是所有木板中最短的——可以对木板排序后二分答案(用k表示). 判断是否合法就用搜索,但数据有点大,要用到两个剪枝.一个是若有一根木材被切开后剩下的长度比最短的木板还短则将其累加入waste,当waste+前k块木板的长度和>木…
[BZOJ1082][SCOI2005]栅栏(搜索) 题面 BZOJ 洛谷 题解 随便写个爆搜,洛谷上就\(80\)分了.先放爆搜代码: #include<iostream> #include<cstdio> using namespace std; inline int read() { int x=0;bool t=false;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(…
P2329 [SCOI2005]栅栏 题目描述 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需要的规格. 而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长度为8和2的两个木板. 你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰最多能够得到多少他所需要的木板. 输入输出格式…
1082: [SCOI2005]栅栏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2340  Solved: 991[Submit][Status][Discuss] Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生任…
http://www.lydsy.com/JudgeOnline/problem.php?id=1082 (题目链接) 题意 给出m块木柴,以及n块木板,要求将m块木柴做木板,要求将木柴切割成与木板一样的长度,问最多可以做成几块木板. Solution 今日考题.乍一看,好像可以二分,然而并不会check,于是码了个贪心,10分mdzz.. 正解:二分+搜索. 每次二分答案mid后,对每块木板进行搜索,枚举用那根木柴去进行切割.没想到剪枝这么强大,这都可以搜过去.. 剪枝1:一开始将不符合条件的…
显然我们取的肯定是前ans块木板.然后砍的木材也应该是从小到大砍(如果小的木材可以满足条件,就一定不会去动大的木材) 所以两遍排序. 二分答案. 然后对于要取的每块木板,我们搜索它是在第x块木板上砍下来的.. 要加剪枝: ①如果砍下了这块木材然后这块木材小于第一块木板,那就失去价值,用t来记录.当t>tot-s[now],(tot是记录的所有给的木板长度),那么退出. ②如果b[now]==b[now-1]那么从当前点开始枚举就可以了,因为前面小的点都被跳过了 #include<algorit…
Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长度为8和2的两个木板.你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰最多能够得到多少他所需要的木板. Input 第一行为整数m(m<= 50)…
Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购 买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需 要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长 度为8和2的两个木板.你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰 最多能够得到多少他所需要的木板. 解题报告 强力剪枝搜索题哈,看到数…
http://www.lydsy.com/JudgeOnline/problem.php?id=1082 题意:n个给出木板,m个给出木板.可以将那m个木板锯成泥想要的长度.问最大能锯成多少个给出的n个木板.(n<=1000, m<=50) #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #inclu…
题目链接:BZOJ - 1082 题目分析 二分 + DFS验证. 二分到一个 mid ,验证能否选 mid 个根木棍,显然要选最小的 mid 根. 使用 DFS 验证,因为贪心地想一下,要尽量先用提供的小的木木棍,尽量先做出需要的大的木棍,所以要先将提供的木棍和需要的木棍都排序. DFS 的时候是按照需要的木棍从大到小的顺序一层一层搜,每一层上是按照从小到大的顺序枚举提供的木棍.(当然枚举的时候已经不一定是从小到大了,有些木棍已经被截掉了一些.) 要使用两个有效的剪枝: 1)如果下一层的木棍和…
这个题真的是太nb了,各种骚 二分答案,肯定要减最小的mid个,从大往小搜每一个木板,从大往小枚举所用的木材 当当前木材比最短的木板还短,就扔到垃圾堆里,并记录waste,当 waste+sum>tot 时,return #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #define N 2005 using…
这个题...只能说比较水... 排序后,算一个前缀和,二分dfs查找答案...加上两个剪枝就过了...QVQ 我只能刷这种水题...我太菜了...QVQ #include<iostream> #include<cstdio> #include<algorithm> #define maxn 100010 using namespace std; int a[maxn],b[maxn],c[maxn]; int n,m,ans,tot,waste,mid; inline…
对于最优解我们发现所有的最优解都可以是前多少多少个,那么我们就二分这个前多少多少个,然后用dfs去判解,我们发现在dfs的过程中如果不剪枝几乎必T,所以我们就需要一些有效的剪枝 I. 我们在枚举过程中每个数选什么是有前后顺序的,然而对于一些相同的数他们并没有顺序我们可以记录上个数的选择点,如果两数相同,那么就从上个数的选择点开始那么时间复杂度就从次方级别降到了组合数级别,是飞跃式的 II. 然后我们发现先对于枚举顺序与选择顺序的选择是玄学的,我们可以视为他们都没影响那么我们就可利用这个了,如果我…
链接 思路 二分+搜索+剪枝. 首先二分一个答案,表示最多可以切出x块.(一个结论:切出的一定是从较小的前x块.如果一个木材可以满足很多个需要的木材,那么切出最小的,就意味着以后再选时的机会更多.) 然后暴力搜索前x块分别由哪个木材切出. 剪枝1:如果所有提供的木材加起来也不能满足需要的木材,直接跳过 剪枝2:记录一下浪费掉的木材(即一块木材切掉了一些后,剩下的木材中连最小的也切不出了的),如果提供的木材总量-浪费掉<当前所有的木材需要的,直接跳过. 剪枝3:当前需要的和下一块需要的木材是一样长…
二分答案,dfs判断是否可行,当b[k]==b[k-1]时可以剪枝也就是后移枚举位置 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=1005; int n,a[N],m,b[N],sum,s[N],re,mid,t[N]; bool dfs(int k,int x) { if(k<=0) return 1; if(s[mid]+re&…
传送门 Solution 纯搜索80分,加二分90分,再补一个小剪枝满分qwq 真.小剪枝:如果下一个的需求和当前相同,那么不需要再次从头开始试(看代码就明白了233) Code #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #define F(i,a,b) for(register int i=(a…
※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday a)bzoj4034[HAOI2015 T2](树链剖分+线段树) http://blog.csdn.net/keshuqi/article/details/51944955 b)luogu1328[NOIP2014 T1]生活大爆炸版石头剪刀布(模拟) http://blog.csdn.net/k…
1082: [SCOI2005]栅栏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2247  Solved: 952[Submit][Status][Discuss] Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购 买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需 要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产…
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2007]轮状病毒:找规律 + 高精: [BZOJ1003][ZJOI2006]物流运输:最短路 + DP: [BZOJ1004][HNOI2008]Cards:Burnside 引理 + DP: [BZOJ1005][HNOI2008]明明的烦恼:prufer编码 + 高精: [BZOJ1007][…
28上午 骚猪选讲 28下午 BOZJ 1081 [SCOI2005]超级格雷码 感觉就是一个找规律,然后模拟输出.半天没找到一个比较简便的模拟方法,这份代码是学习网上一位大佬的,很巧妙. 代码: #include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,pow[40]; void print(int y){ if(y<10) printf("%d…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
目录 一.关于DFS 1. 什么是DFS 2. DFS的搜索方式 二.DFS的具体实现 三.剪枝 1. 顺序性剪枝 2. 重复性剪枝 3. 可行性剪枝 4. 最优性剪枝 5. 记忆化剪枝 四.练习 一.关于DFS 1. 什么是DFS 深度优先搜索算法,又称DFS(Depth First Search).DFS算法是一种搜索算法,而搜索算法实质上是一种枚举,即借助计算机的高性能来有目的地枚举一个问题的部分情况或这个问题的所有情况,进而求出问题的解的一种方法. 2. DFS的搜索方式 根据算法的名字…
暴力出奇迹…… 原题: 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长度为8和2的两个木板.你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰最多能够得到多少他所需要的木板. m<= 50,n <= 1000 第一眼…
Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木板,然后切割成他所需要的规格.而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长度为8和2的两个木板.你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰最多能够得到多少他所需要的木板. Input 第一行为整数m(m<= 50)…
正解:搜索 解题报告: 先放下传送门! 首先说下爆搜趴,就直接枚每个需求是否被满足以及如果满足切哪个板子,随便加个最优性剪枝,似乎是有80pts 然后思考优化 首先显然尽量满足需求比较小的,显然如果能满足边长大的替换成边长小的也欧克,所以先对需求都排个序,就不用考虑是否满足了一定都满足 这样就可以发现变成了一个可二分的问题?然后爆搜check一下就好 然后check中的剪枝我港下QAQ 首先可以记录一个浪费了多少木材,如果浪费的加上至少要用的木材数量大于已有数量了,显然不成立 考虑怎么样会浪费?…
传送门 Luogu 解题思路 我们有很显然的这样一条贪心思路: 首先满足长度短的木板,因为如果可以满足长的也肯定可以满足短的,而且可能满足更多. 那么我们就会有这样的思路:枚举一条木板由哪条木板切割而来. 然后我们就可以考虑一堆剪枝了: 如果当前长木板长度\(-\)浪费的木板长度\(<\)所需要的木板长度,剪掉: 如果当前需要满足的木板和前一块长度相同,那么就去dfs前一块,因为如果满足不了第 \(i\) 块,那么第 \(i-1\) 块也一定不行 . 二分答案减少搜索范围 不知道算不算剪枝 细节…
先二分答案,然后搜索暴力判断由于数据范围较大,需要剪枝:1.当前所有可能被用到的木板长度和(长度要不小于最小所需长度)>=所要拼成的所有木板的和:2.对于需求从大到小枚举木板(这样一开始枚举次数较少,后来的情况容易被剪枝掉) 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,a[105],b[1005]; 4 bool dfs(int k,int s){ 5 if (s<0)return 0; 6 if (!k)r…