
贪心
文章平均质量分 61
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
POJ3617-Best Cow Line
给定长度为N的字符串S,要求构造一个字典序最小的字符串T。#include const int MAXN = 2000;char s[MAXN+2];char t[MAXN+2];int main(){ int n; scanf("%d", &n); getchar(); int i; for (i = 0; i < n; i+原创 2016-03-31 09:55:21 · 285 阅读 · 0 评论 -
UVa11792-Commando War
需要b分钟给士兵指派任务,j分钟士兵执行任务,问用时最少。 将任务按照执行时间从大到小排序,贪心即可。#include <cstdio>#include <algorithm>using namespace std;const int maxn = 10000 + 10;struct soldier { int b, j;};soldier tm[maxn];bool comp(con原创 2016-09-19 16:23:20 · 295 阅读 · 0 评论 -
POJ1083-Moving Tables
巧妙的类似贪心的做法#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef pair<int, int> P;const int maxn = 500;P itv[maxn];int room[maxn];int main(int argc, char const *argv[]) {原创 2016-08-16 08:55:35 · 444 阅读 · 0 评论 -
POJ1862-Stripies
这题是基本不等式啊,每次选取质量m最大的两个stripy进行碰撞结合,能够得到最小的质量。所有只要维护一个优先队列就可以了。#include #include #include using namespace std;priority_queue que;int main(){ int n; scanf("%d", &n); for原创 2016-04-21 10:51:42 · 621 阅读 · 0 评论 -
POJ3045-Cow Acrobats
这是一道贪心的题,找出每头牛排序的方法是关键。当一群牛堆叠起来的时候,从下往上每头牛的risk就是sum-w-s,因此按照w和s之和的大小进行排序即可。#include #include using namespace std;const int maxn = 5*10e4;const int min_risk = -10e9;struct cow { int w,原创 2016-07-26 15:08:05 · 268 阅读 · 0 评论 -
POJ3190-Stall Reservations
先对每头牛进行从早到晚的排序。由于需要为每个牛分配牛棚并输出,维护一个数组t表示第i头牛位于哪一个牛棚。维护一个以结束时间为标准从小到大的优先队列,每次提取出最早结束的牛棚,判断是否可用,如果可用的话标记,不可用则新建一个牛棚。最后输出即可。#include #include #include using namespace std;const int MAXN = 50原创 2016-05-18 13:20:49 · 498 阅读 · 0 评论 -
POJ3614-Sunscreen
每一种防晒霜可以给多个牛使用,这时候该如何决策呢?维护一个优先队列,按maxSPF从小到大的顺序排列。这是为了尽量把SPF小的防晒霜给maxSPF小的牛。首先将牛和防晒霜进行排序,然后按防晒霜的SPF从小到大分配给可用的牛。#include #include #include #include using namespace std;typedef pair P;原创 2016-04-21 18:35:29 · 545 阅读 · 0 评论 -
POJ3262-Protecting the Flowers
这道题的关键在于如何对这些牛进行排序。设有两头牛分别为a, b。a = (Ta, Da),b = (Tb, Db)则先传送a回牛棚损失2Ta * Db;先传送b损失2Tb * Da; 因此排序时选择损失较小的,即每次选取最优解。#include #include using namespace std;typedef pair P;const int MAXN原创 2016-04-21 13:13:48 · 291 阅读 · 0 评论 -
POJ3040-Allowance
这道题的思路十分的简单。大于等于c的面额每周付一次,即面额数等于周数。剩下的小于c的面额,从大到小取钱,未到c的用从小到大的面额填充,从而减少浪费。但是明白了题目的套路还不够,实现起来有一些小困难。#include #include #include #include using namespace std;typedef pair P;const int INF原创 2016-04-20 17:01:55 · 588 阅读 · 0 评论 -
POJ1017-Packets
题目大意是某公司有不同规格的产品1*1,2*2,3*3,4*4,5*5,6*6。要将这些产品放入几个大小为6*6的包裹,问最少需要几个包裹。感谢Discuss和百度上大神们的优秀算法。首先最好能填满每个包裹或使包裹最后剩余空间越少越好,且每个包裹装的产品越多越好。总的来说每个6*6,5*5,4*4的产品放入一个包裹,将几个3*3的产品放入一个包裹,包裹的剩余空间先用2*2的填充,再原创 2016-04-11 12:29:30 · 446 阅读 · 0 评论 -
POJ2393-Yogurt factory
夭寿啦!一群牛打算发家致富卖酸奶啦!这是一道简单的贪心问题,将每两周的两种情况(每周生产和前一周生产下一周的酸奶)的价格进行比对选择价格小的即可。#include #include #include using namespace std;typedef pair week;const int MAXN = 10000;week cy[MAXN+2];int main原创 2016-04-10 13:47:44 · 385 阅读 · 0 评论 -
POJ3253-Fence Repair
将题目想成一棵二叉树,一块木板为父节点,切割后的两段长度为它的子节点。如此切割的开销为父节点木板对应的长度。总开销为所有含有子节点的父节点对应长度只和。等于这棵树的各叶节点乘以节点的深度。因此最短的板应是深度最大的叶子节点之一。最短的板与次短的板的节点是兄弟节点。将l按大小顺序排序,最短的板l1和次短的板l2是由长度为(l1+l2)的板得到的。递归地将这n-1块木板的问原创 2016-03-31 16:00:06 · 415 阅读 · 0 评论 -
POJ1328-Radar Installation
一开始以为将各个小岛的坐标排序从最左端开始找到使该小岛在雷达边缘的雷达坐标进行贪心即可。事实证明:我还是太年轻......正确做法是将每个小岛坐标求出圆心所在的区间,区间重合的地方就是雷达的设置点。#include #include #include #include #include using namespace std;const int MAXN = 1000;原创 2016-04-08 23:54:49 · 290 阅读 · 0 评论 -
POJ2376-Cleaning Shifts
在t个shift,n头牛中选择用最少的牛完成所有的shift。明显是个贪心的题。只要每次找出最晚结束shift的牛即可找到最优解。#include #include #include using namespace std;const int maxn = 25000;typedef pair cow;cow itv[maxn+2];int comp(cow a,原创 2016-04-05 17:36:57 · 474 阅读 · 0 评论