贪心
wanherun
今天会有好事发生吗
展开
-
bzoj3411 [Usaco2009 Dec]Bobsledding 高山滑雪
题目贪心题目。。如果知道一段路程的起始速度和终点的限制速度,那么最大速度就可以很轻松的求出来。但是,有一点值得注意,每一个点的速度限制可能是假的,因为如果到了最大速度,到下一个点速度可能降不下去。所以,就要先从后往前扫一遍来重新算速度。之后就是分类讨论了。#include<bits/stdc++.h> #define N 100000 using namespace std; int n,L,v,a原创 2017-12-10 09:28:20 · 378 阅读 · 0 评论 -
bzoj1192 [HNOI2006]鬼谷子的钱袋
题目这这这,是什么dp题(笑)233。水题一题。。。。用二进制最优,求个log就好了。没有代码。。。原创 2017-09-12 10:34:56 · 253 阅读 · 0 评论 -
bzoj3293 [Cqoi2011]分金币
题目这,这,这不是noip普及组的题吗。。。。。 其实,向左向右传本质上只要向右传就好了,这样,设一个未知数就可以把代价表示出来,之后就是一个绝对值求最值了,这样问题就十分简单了。取中位数即可。#include<bits/stdc++.h> #define N 100000 using namespace std; int n,tmp,mid; long long ans; int A[N+1],原创 2017-09-11 21:52:00 · 273 阅读 · 0 评论 -
bzoj2563 阿狸和桃子的游戏
题目如果只有点或边的话,十分简单对吧,但是,现在都有。怎么办呢? 我们可以吧边权分在点上,怎么分,一般的想法就是对半分。但这样对不对呢?感性认识,由于是算分差,,如果两个人各选了一条边的一个端点,没有影响,不然的话,选了两个端点的人能超一个边权。那,这样就是对的。 排序后,轻松解决。#include<bits/stdc++.h> using namespace std; int n,m; int原创 2017-09-11 21:51:47 · 190 阅读 · 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 · 186 阅读 · 0 评论 -
bzoj1029 [JSOI2007]建筑抢修
题目一道贪心的题。 先按照T2排序,能修则修,不能修看能否换掉前面修的,这样绝不会让答案更坏。手写堆233#include<bits/stdc++.h> #define N 150000 using 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 · 280 阅读 · 0 评论 -
bzoj1034 [ZJOI2008]泡泡堂BNB
题目田忌赛马,中国古代人的智慧结晶233。排序后,算一算就好了。#include<bits/stdc++.h> #define N 100000 using 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 · 153 阅读 · 0 评论 -
bzoj3668 [Noi2014]起床困难综合症
题目又出现了二进制,按位贪心吧。。最高位若为0可以达到1,就用。 最高位若为1可以达到1,并目前没有超过m,就用。一开始被int卡爆了233.#include<bits/stdc++.h> #define N 100000 using 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 · 177 阅读 · 0 评论 -
bzoj1217 [HNOI2003]消防局的设立
题目树上的贪心,为了极大利用空间,当两个节点之间距离为5的话最好。#include<bits/stdc++.h> #define N 1005 using 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 · 325 阅读 · 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 · 448 阅读 · 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 · 216 阅读 · 0 评论 -
[noip2012]国王游戏 题解
显然,这样题一定是要排序的,如何拍呢。我们先猜一猜,发现只要按照乘积大小来排序就好了。至于证明,我们这样想,如果只交换两个相邻的数,产生的影响只要它们两个数之间,然后讨论一下就可以了。然后,60%数据保证答案小于10^9,说明什么,之后的数据要上高精度,好麻烦呀。但其实还是可以写的,可以写在一个结构体内,但我好像不会233。就用的函数,貌似很丑,大家凑合看看。#include<bits/stdc++原创 2017-10-29 21:11:52 · 1729 阅读 · 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 · 282 阅读 · 0 评论 -
[noip2013]积木大赛 题解
一开始还以为是什么dp题目,不过,仔细想一想第一题不会出这么难吧,所以,就考虑简单做法。贪心的想,每次把每段区间都加到最大,然后分开的每个区间都这样操作就好了。不过这样模拟很难实现,我们要优化一下,记录一个上次最高的y,如果当前x小于这个,对答案的贡献就加(y-x),表示这段要这么多次才可以符合要求。代码十分短小,主要是想法。#include<bits/stdc++.h> #define N 100原创 2017-10-26 22:06:15 · 507 阅读 · 0 评论 -
[noip2015]跳石头 题解
求最小的最大,一般就都是二分答案的题。首先,这是显然单调递增的,我们二分这个最大长度len,看能否满足条件。具体操作也很简单,看两块石头之间是否大于了len,如果大了,就移除第二个,继续比较。 最后看一看移除的数量和m的关系就好了。#include<bits/stdc++.h> #define N 50000 using namespace std; int n,m,L,l,r,mid,mx; i原创 2017-10-22 17:30:49 · 846 阅读 · 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 · 233 阅读 · 0 评论 -
bzoj2423 [HAOI2010]最长公共子序列
题目怎么说呢,这道题应该算是DP的入门题吧(第一小问)。统计方案数的话,我是不会的,看了看题解,一知半解了吧,要不考前背一背233。好菜呀。。。#include<bits/stdc++.h> #define N 5000 using 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 · 261 阅读 · 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 · 311 阅读 · 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 · 207 阅读 · 0 评论 -
bzoj3709 [PA2014]Bohater
题目这道题,第一眼就可以看出是一道排序题,但怎么排呢。显然,要先把可以加血的怪打掉,这时自然的想先打血少的怪。好了,之后是减血的怪,当时想了很久,都是错的,怕是太菜了吧。我们这样想,之后自己的血量肯定单减,所以一个怪现在打不了以后也打不了,所以我们先打回血多的怪。这样,这个问题就成排序贪心了。#include<bits/stdc++.h> #define N 100000 using namespa原创 2017-08-28 20:37:34 · 351 阅读 · 0 评论