
贪心
wanherun
今天会有好事发生吗
展开
-
bzoj3411 [Usaco2009 Dec]Bobsledding 高山滑雪
题目贪心题目。。如果知道一段路程的起始速度和终点的限制速度,那么最大速度就可以很轻松的求出来。但是,有一点值得注意,每一个点的速度限制可能是假的,因为如果到了最大速度,到下一个点速度可能降不下去。所以,就要先从后往前扫一遍来重新算速度。之后就是分类讨论了。#include<bits/stdc++.h>#define N 100000using namespace std;int n,L,v,a原创 2017-12-10 09:28:20 · 407 阅读 · 0 评论 -
bzoj1192 [HNOI2006]鬼谷子的钱袋
题目这这这,是什么dp题(笑)233。水题一题。。。。用二进制最优,求个log就好了。没有代码。。。原创 2017-09-12 10:34:56 · 270 阅读 · 0 评论 -
bzoj3293 [Cqoi2011]分金币
题目这,这,这不是noip普及组的题吗。。。。。 其实,向左向右传本质上只要向右传就好了,这样,设一个未知数就可以把代价表示出来,之后就是一个绝对值求最值了,这样问题就十分简单了。取中位数即可。#include<bits/stdc++.h>#define N 100000using namespace std;int n,tmp,mid;long long ans;int A[N+1],原创 2017-09-11 21:52:00 · 300 阅读 · 0 评论 -
bzoj2563 阿狸和桃子的游戏
题目如果只有点或边的话,十分简单对吧,但是,现在都有。怎么办呢? 我们可以吧边权分在点上,怎么分,一般的想法就是对半分。但这样对不对呢?感性认识,由于是算分差,,如果两个人各选了一条边的一个端点,没有影响,不然的话,选了两个端点的人能超一个边权。那,这样就是对的。 排序后,轻松解决。#include<bits/stdc++.h>using namespace std;int n,m;int原创 2017-09-11 21:51:47 · 211 阅读 · 0 评论 -
bzoj1150 [CTSC2007]数据备份Backup
题目应该是道贪心题目。如何贪心呢?还是很巧妙的啊。每次选最小的一个数,再把它左右两边数之和减去这个数差回去,小根堆的应用。不会证明为什么233。找规律?#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<cmath>原创 2017-09-09 16:17:19 · 203 阅读 · 0 评论 -
bzoj1029 [JSOI2007]建筑抢修
题目一道贪心的题。 先按照T2排序,能修则修,不能修看能否换掉前面修的,这样绝不会让答案更坏。手写堆233#include<bits/stdc++.h>#define N 150000using namespace std;struct building{ int st; int ed;};building A[N+1],heap[N+1];int n,tmp,ans,s原创 2017-09-09 16:16:43 · 296 阅读 · 0 评论 -
bzoj1034 [ZJOI2008]泡泡堂BNB
题目田忌赛马,中国古代人的智慧结晶233。排序后,算一算就好了。#include<bits/stdc++.h>#define N 100000using namespace std;int A[N+1],B[N+1];int n;int cal(){ int i=1,j=1; int a=n,b=n; int Ans=0; while(i<=a)原创 2017-09-07 14:23:10 · 169 阅读 · 0 评论 -
bzoj3668 [Noi2014]起床困难综合症
题目又出现了二进制,按位贪心吧。。最高位若为0可以达到1,就用。 最高位若为1可以达到1,并目前没有超过m,就用。一开始被int卡爆了233.#include<bits/stdc++.h>#define N 100000using namespace std;long long n,m,x;char opt[N+1][5];long long digit[N+1][50];long l原创 2017-09-06 21:53:52 · 196 阅读 · 0 评论 -
bzoj1217 [HNOI2003]消防局的设立
题目树上的贪心,为了极大利用空间,当两个节点之间距离为5的话最好。#include<bits/stdc++.h>#define N 1005using namespace std;int n,f[N],x,ans;vector <int> edge[N];void add(int x,int y){ edge[x].push_back(y);} inline char nc(原创 2017-08-29 07:39:57 · 344 阅读 · 0 评论 -
bzoj2717 [Violet 4]迷路的兔子
题目构造题。一共有C(n,2)对兔子,每天对三对兔子有影响,每对兔子不能超过三次。感性认识,能挺C(n,2)天。之后,就是如何构造了,当然需要玄学。#include<bits/stdc++.h>using namespace std;int n;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return原创 2017-09-24 20:59:33 · 465 阅读 · 0 评论 -
bzoj2796 [Poi2012]Fibonacci Representation
题目感性认识,每次选最接近的斐波那契数就好了。记忆化一发。#include<bits/stdc++.h>using namespace std;int T;long long fib[105],n; map <long long,int> f;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return原创 2017-09-25 22:08:33 · 228 阅读 · 0 评论 -
[noip2012]国王游戏 题解
显然,这样题一定是要排序的,如何拍呢。我们先猜一猜,发现只要按照乘积大小来排序就好了。至于证明,我们这样想,如果只交换两个相邻的数,产生的影响只要它们两个数之间,然后讨论一下就可以了。然后,60%数据保证答案小于10^9,说明什么,之后的数据要上高精度,好麻烦呀。但其实还是可以写的,可以写在一个结构体内,但我好像不会233。就用的函数,貌似很丑,大家凑合看看。#include<bits/stdc++原创 2017-10-29 21:11:52 · 1763 阅读 · 0 评论 -
[noip2013]花匠 题解
一句话题意:求最长的波动子序列。其实可以当作一个结论记住,只要贪心地选就好了。注意判断相等情况,再用一个tmp记录一下上一次的大小关系,这样就十分简单了。#include<bits/stdc++.h>using namespace std;int last,now,tmp;int n,cnt;int main(){ scanf("%d",&n); scanf("%d",&l原创 2017-10-26 22:12:30 · 304 阅读 · 0 评论 -
[noip2013]积木大赛 题解
一开始还以为是什么dp题目,不过,仔细想一想第一题不会出这么难吧,所以,就考虑简单做法。贪心的想,每次把每段区间都加到最大,然后分开的每个区间都这样操作就好了。不过这样模拟很难实现,我们要优化一下,记录一个上次最高的y,如果当前x小于这个,对答案的贡献就加(y-x),表示这段要这么多次才可以符合要求。代码十分短小,主要是想法。#include<bits/stdc++.h>#define N 100原创 2017-10-26 22:06:15 · 541 阅读 · 0 评论 -
[noip2015]跳石头 题解
求最小的最大,一般就都是二分答案的题。首先,这是显然单调递增的,我们二分这个最大长度len,看能否满足条件。具体操作也很简单,看两块石头之间是否大于了len,如果大了,就移除第二个,继续比较。 最后看一看移除的数量和m的关系就好了。#include<bits/stdc++.h>#define N 50000using namespace std;int n,m,L,l,r,mid,mx;i原创 2017-10-22 17:30:49 · 872 阅读 · 0 评论 -
bzoj3410 [Usaco2009 Dec]Selfish Grazing 自私的食草者
题目贪心经典题目,用一些不相交的线段覆盖区间。按l排序,记录目前最远的rmx,对于新的线段,如果l>=rmx,就加入,更新rmx。否则判断当前r是否#include<bits/stdc++.h>#define N 50000 using namespace std;int n,cnt,tmp;struct cow{ int l,r; bool operator <(const原创 2017-10-12 22:42:54 · 269 阅读 · 0 评论 -
bzoj2423 [HAOI2010]最长公共子序列
题目怎么说呢,这道题应该算是DP的入门题吧(第一小问)。统计方案数的话,我是不会的,看了看题解,一知半解了吧,要不考前背一背233。好菜呀。。。#include<bits/stdc++.h>#define N 5000using namespace std;char s1[N+5],s2[N+5];int f[3][N+5],g[3][N+5],m,n; const long long p原创 2017-10-12 22:38:41 · 280 阅读 · 0 评论 -
bzoj1572 [Usaco2009 Open]工作安排Job
题目震惊,stl都排到了第五,怕是膨胀了。。。简单题,贪心一下,先按时间排序,如果当前的时间大于了限制,取出堆中最小的即可。#include<bits/stdc++.h>#define N 100000 using namespace std;struct work{ int st; int rwd; bool operator < (const work &A)con原创 2017-09-27 23:06:49 · 335 阅读 · 0 评论 -
bzoj4291 [PA2015]Kieszonkowe
题目水题,几个变量就OK了。如果和为偶数,输出,否则减去最小奇数,输出。若答案为0,输出无解。#include<bits/stdc++.h>using namespace std;int n,x,tot;int mn;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(原创 2017-09-26 22:58:56 · 219 阅读 · 0 评论 -
bzoj3709 [PA2014]Bohater
题目这道题,第一眼就可以看出是一道排序题,但怎么排呢。显然,要先把可以加血的怪打掉,这时自然的想先打血少的怪。好了,之后是减血的怪,当时想了很久,都是错的,怕是太菜了吧。我们这样想,之后自己的血量肯定单减,所以一个怪现在打不了以后也打不了,所以我们先打回血多的怪。这样,这个问题就成排序贪心了。#include<bits/stdc++.h>#define N 100000using namespa原创 2017-08-28 20:37:34 · 369 阅读 · 0 评论