
贪心
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
bzoj 4245 [ONTAK2015]OR-XOR 贪心
题意:给定一个长度为n的序列a1,a2,…,an,将它划分为m段连续的区间,设第i段的费用ci为该段内所有数字的异或和,则总费用为c1 or c2 or … or cm。求总费用的最小值。从高到低枚举每一位,我要把这个序列分成m块,使每块中只有偶数个数该位为1。那么如果我把它分成尽可能多的块使每块中该位有偶数个1,那么任意两块合并之后仍然满足每块中该位有偶数个1。分块过程满足贪心性质,可以从前往后贪原创 2016-09-18 16:47:02 · 371 阅读 · 0 评论 -
codeforces #720 720A 720B
720A贪心,把从(0,0)开始的人按距离从小到大排序,然后按顺序枚举所有人,尽量往下,在保证这个的前提下尽量往左。 这样可以将从(0,0)开始的人都填进去,然后把空位置按到(0,m+1)的距离排序,验证一下(0,m+1)的人是否都能填进去。#include <bits/stdc++.h>using namespace std;int n,m,k,l;int v1[11000],v2[110原创 2016-09-19 13:15:00 · 1011 阅读 · 0 评论 -
bzoj 1229: [USACO2008 Nov]toy 玩具 三分+贪心
1229: [USACO2008 Nov]toy 玩具听说这个东西满足三分,并不知道为什么。。。 三分需要新买多少,然后贪心:优先选新买的没有用过的,然后选慢洗的,然后选快洗的。 按时间维护一个队列,每次将当前时间-快洗时间的加入队首。#include <bits/stdc++.h>using namespace std;#define N 110000#define MP(x,y) ma原创 2016-11-11 14:55:23 · 686 阅读 · 0 评论 -
bzoj 2799 [Poi2012]Salaries 贪心
感觉自己语文水平捉鸡,粘一下吴大爷的题解吧。。。 “ 我们维护以每一个节点为根的子树内部有多少个没有确定权值的点,另外,我们利用一个数组维护每个权值已经给了哪个节点. 我们从小到大遍历每个权值,若这个权值当前并没有确定给哪个节点,则将其压入栈中;否则我们在对应节点的子树中进行一系列确定操作: 我们维护栈中有多少个权值,以及有多少个自由权值.(这个是什么一会再说) 若未确定的节点数正好等于当原创 2016-11-16 10:05:44 · 525 阅读 · 0 评论 -
bzoj 1484 [HNOI2009]通往城堡之路 贪心
感觉这题还是挺迷的。。。 并不会证这个玩意为什么是对的。。。固定第一个点的值,其他点的值取a[i]-(i-1)*d(这个点能取的最小值) 然后每次找一个后缀,把这个后缀所有数加一个大于0的值,且保证这是最优的取法下加的尽量大的值。 由于每次把一个数加到最值所以复杂度是O(n2)O(n^2)的。#include <bits/stdc++.h>using namespace std;#defi原创 2016-11-28 20:34:37 · 504 阅读 · 0 评论 -
bzoj 2067 [Poi2004]SZN 贪心 二分
对于第一问答案就是∑(du[i]−1)/2+1\sum{(du[i]-1)/2}+1 对于第二问先二分答案,对于一个非根的点,一定有一条从父亲向下的链,设f[i]表示到点i父亲往下的链最短长度。 将当前点的所有儿子的f[son[i]]+1f[son[i]]+1 放到一起排个序。 二分f[i]的位置,检验时去掉二分位置的值,贪心每次拿一个最小的匹配最大的(组成一条链),如果儿子总数是偶数把剩余的原创 2016-12-03 19:32:09 · 1000 阅读 · 0 评论 -
bzoj 2708 [Violet 1]木偶 dp 贪心
把所有pi排序。最终答案一定是这样的。 就是先一些向左匹配的,再一些向右匹配的。 设f[i]f[i] 表示前i个点的最大个数。 枚举最后一个同向的区间。验证时从小到大枚举验证。#include <bits/stdc++.h>using namespace std;#define N 61int n;int a[N],f[N];int get(int l,int r,int x)原创 2016-12-13 18:00:59 · 396 阅读 · 0 评论 -
bzoj 2090 [Poi2010]Monotonicity 2 树状数组 dp 贪心
设f[i]f[i] 表示到i最长的长度。 然后两个树状数组和一个普通数组分别维护大于,小于和等于。 不会证这个东西。。。#include <bits/stdc++.h>using namespace std;#define N 1100000#define A 1000000int n,K;char s[N];int tr1[N],tr2[N],tr3[N];int a[N],f[原创 2016-12-09 20:26:20 · 510 阅读 · 0 评论