贪心
呆呆与笨笨
梦想是被追逐的,而不是幻想的
展开
-
南阳 106 背包问题
#include#includetypedef struct In{ int x; int y;};In num[100];/*typedef struct In{ int x; int y;}num[100];*///这样写是错的,编译过不了 int cmp(const void *a,const void *b){ return (原创 2014-01-03 22:58:33 · 653 阅读 · 2 评论 -
poj 3262 Protecting the Flowers(贪心)
题意:有n个牛在FJ的花园乱吃。所以FJ要赶他们回牛棚。每个牛在被赶走之前每秒吃Di个花朵。赶它回去FJ要花的时间是Ti。在被赶走的过程中牛就不能乱吃了原创 2014-08-04 21:14:33 · 456 阅读 · 0 评论 -
南阳 966 选择不相交区间
#include#include#includetypedef struct In{ int x,y;};In num[1010];int cmp(const void *a,const void *b){ In *c=(In *)a; In *d=(In *)b; if(c->y!=d->y) return c->y-d->y; }int main(){ int n,m原创 2014-05-19 21:58:14 · 534 阅读 · 0 评论 -
南阳 891 找点
区间选点#include#include#includestruct In{ int l,r;}num[110]; int cmp(const void *a,const void *b){ In *c=(In *)a; In *d=(In *)b; //右端点按从小到大排序 if(c->r!=d->r) return c->r-d->r; /* if(c->l!=d原创 2014-05-19 21:54:19 · 644 阅读 · 0 评论 -
基于贪心算法的几类区间覆盖问题
(1)区间完全覆盖问题问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖样例:区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5]解题过程:1将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,转载 2014-05-19 21:51:13 · 544 阅读 · 0 评论 -
南阳 12 喷水装置(2)
区间选点中的区间完全覆盖问题;求解思路如下。1:先根据给出的点的坐标和半径取出其能覆盖的线段范围;假如区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5]2将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8]3设置一个变量表示已经覆盖到的区域。再剩下的线段原创 2014-04-10 12:29:55 · 640 阅读 · 1 评论 -
南阳 915 +-字符串
从局部开始考虑到整体#include#includeint main(){ char s[5010],str[5010]; int n,i,ans,m,t,j; while(~scanf("%s",s)){ scanf("%s",str); n=strlen(s); for(m=t=i=0;i<n;i++){ if(s[i]=='+'){原创 2014-03-09 17:11:32 · 582 阅读 · 0 评论 -
南阳 14 会场安排问题
分析:先按结束时间进行排序,结束时间越早,安排活动越多,在将开始时间与上一个结束时间进行比较 #include#include#includetypedef struct In{ int x; int y;};In pos[10010];int cmp(const void *a,const void *b){ In *c=(In *)a; In *d=(In *)b;原创 2014-01-15 10:56:19 · 648 阅读 · 0 评论 -
南阳 6 喷水装置(1)
#include#include#include#includeint cmp(const void *a,const void *b){ return *(double *)b>*(double *)a?1:-1;}//函数的类型标示符一般为intint main(){ int n,m,i; double r[610],s; scanf("%原创 2014-01-15 10:58:13 · 496 阅读 · 0 评论 -
南阳 47 过河问题
解题报告:首先按照过河时间从小到大排序,当n>3时候,就是考虑用最小时间先把用时最长的两个人送过河,且手电筒仍然留在未过河的这边,剩下的再依次求解。把当前用时最长的两个人送过河可以考虑两种方案:方案一: 1 号和 2 号先过河,然后 1 号回来,n 号和 n-1 号过河,然后 2 号再回来用时:2*a[2]+a[1]+a[n];方案二: 1 号和 n 号先过原创 2014-01-15 10:53:55 · 583 阅读 · 0 评论 -
南阳 71 独木舟上的旅行
思路:每条船最多只能乘坐两个人,结合一些常识我们很容易想到解决思路:每条船上安排一个体重大的和体重小的。有了思路后,方法就简单了,先安排一个体重大的上船,如果此船还能承下体重较小的乘客时,则两人一条船,否则此船只能承载一个人。另外,为使寻找体重大的和体重小的乘客,需要先按体重从大到小排序。这样只需从数组两头向中间遍历一遍即可。#include#include#inc原创 2014-01-15 10:51:24 · 766 阅读 · 0 评论 -
hdu 1050 Moving Tables
解题思路:假设从1->399(或者2->400)的走廊是一条线段,每搬一张桌子(如从30号房间搬到40号房间),则线段30->40被重复了一次。如果另外再搬一张桌子(如从35号房间搬到45号房间),则线段35->45被重复了一次。而相同的线段35->40则被重复了两次。问题转化为求最大重复次数。那很好办了,一个201大小的数组表示走廊位置,初始化为0. 若30->40重复(30号房间搬桌子原创 2014-01-06 22:43:38 · 550 阅读 · 0 评论 -
hdu 2037 今年暑假不AC
#include#includetypedef struct In{ int x,y;};In num[110];int cmp(const void *a,const void *b){ In*c=(In *)a; In*d=(In *)b; if(c->y!=d->y) return c->y-d->y; else return d->x-原创 2014-01-06 22:05:38 · 481 阅读 · 0 评论 -
hdu 2187 悼念512汶川大地震遇难同胞——老人是真饿了(贪心)
#include#include#include#includeusing namespace std;struct In{ int p,w;}num[1000];int cmp(In a,In b)//把价格最便宜的排前面{ if(a.p!=b.p) return a.p<b.p; else return a.w>b.w;}int main(){原创 2014-08-14 09:27:27 · 582 阅读 · 0 评论