[luoguP1131] [ZJOI2007]时态同步(贪心)传送门显然是一棵树。又显然一段一段地增加比较优。我们可以dfs,并且尽量把每一个节点所有子树中所有节点的时间增加到一样。#include <vector>#include <cstdio>#include <c
[luoguP1053] 篝火晚会(贪心 + 乱搞)传送门假设第一个位置是1,那么枚举它的左右两边是谁,有两种情况,然后可以递推求出序列。然后可以贪心,两个序列有多少个不同的数,答案就是多少,具体为啥,yy一下即可然后就是判断递
[BZOJ1596] [Usaco2008 Jan]电话网络(树形DP || 贪心)传送门
1.树形DP
#include <cstdio>
#include <cstring>
#include <iostream>
#define N 10001
using namespace std;
int n, cnt;
int f[N][3], head[N], to[N << 1],
[BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)传送门
把任务按照d排序
一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大,
就从堆中弹出一个数,再把当前的数放进去
#include <queue>
#include <cstdio>
#include <
[BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)传送门
告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点
那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的。
#include <cstdio>
#include <c
[luoguP2672] 推销员(贪心 + 树状数组 + 优先队列)传送门
贪心。。。蒟蒻证明不会。。。
每一次找最大的即可,找出一次最大的,数列会分为左右两边,左边用stl优先队列维护,右边用树状数组维护。。
(线段树超时了。。。。)
代码
[POJ1456]Supermarket(贪心 + 优先队列 || 并查集)传送门
1.贪心 + 优先队列
按照时间排序从前往后
很简单不多说
——代码
1 #include <queue>
2 #include <cstdio>
3 #include <iostream>
4 #include <algorithm>
[luoguP2949] [USACO09OPEN]工作调度Work Scheduling(贪心 + 优先队列)传送门
这个题类似于建筑抢修。
先按照时间排序。
如果当前时间小于任务截止时间就选,
否则,看看当前任务价值是否比已选的任务的最小价值大,
如果是,就替换。
可以用优先队列
[luoguP2434] [SDOI2005]区间(贪心)传送门
简单贪心
——代码
1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4
5 int n, l, r;
6 struct node
7 p[50001];
10
11 inline
[luoguP2983] [USACO10FEB]购买巧克力Chocolate Buying(贪心)传送门
按价格排序后贪心
——代码
1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4
5 int n;
6 long long m, ans;
7 struct node
8 p
[luoguP2885] [USACO07NOV]电话线Telephone Wire(DP + 贪心)传送门
真是诡异。
首先 O(n * 100 * 100)
三重循环
f[i][j] 表示到第 i 个柱子,高度是 j 的最小花费
f[i][j] = min(f[i 1][k] + abs(k j) * c + (j a[j]) * (j a[j])
[BZOJ1029] [JSOI2007]建筑抢修(贪心 + 优先队列)传送门
把数据存在结构体中,至于怎么贪心?
肯定会有些想法,正确错误先不必说,先来试一试。
1.按照 t2 为第一关键字从小到大排,按照 t1 为第二关键字从小到大排
这个显然错
[luoguP3606] [USACO17JAN]Building a Tall Barn建谷仓(贪心 + 线段树)传送门
把线段都读进来然后排序,先按右端点为第一关键字从小到大排序,后按左端点为第二关键字从小到大排序。
注意不能先按左端点后按右端点排序,否则会出现大包小的情况,如下









