题意:

      n个区间,m种点,每种点有ci个,如果一个点的范围在一个区间上,那么就可以消耗掉一个区间,问最多可以消耗多少个区间,就是这n个区间中,有多少个可能被抵消掉。

思路:

      方法不唯一,首先可以用贪心来做,看到网上说的都是优先队列的解法,我说下我的想法,我是直接sort排序后暴力(其实根本达不到n*m*l的时间复杂度),我先把所有老牛也就是区间按照上端点(***不是他们说的下端点)从小打到排序,然后在把护肤品按照第一个值从小到大排序,然后就是给给每一个护肤品尽可能找到一个点,同时这个点的右端点尽可能的小,为了后面别的护肤品留下更大的机会,下面分析枚举代码

第i个护肤品的第j个和第k只奶牛

for(i = 1 ;i <= m ;i ++)

for(j = 1 ;j <= sp[i].c ;j ++)

{

    for(k = 1 ;k <= n ;k ++)

    if(!mark[k] && cow[k].l <= sp[i].p && cow[k].r >= sp[i].p)

    {

          ans ++;

          mark[k] = 1;

          break;  

    }

    if(k == n + 1) 我个人觉得我加的这个地方可以很好的优化掉很多数据,这么加的

    break;         依据是如果第i种护肤品的第j个不能给剩下的奶牛用了,那么第i种

}                  的其他的也没用了,直接break

还有就是这个题目可以最大流来做,至于用那种算法,自己随意吧,我用的是DINC,建图比较简单,我不想说了,如果你做过流的话一下就能想到建图了,其实我感觉这个题目用最大流有点悬,但是AC了,因为边的条数可能达到 (2500*2500+5000)* 2 = 12510000。

贪心
#include<stdio.h>
#include<string.h>
#include<algorithm> #define N 2500 + 10 using namespace std; typedef struct
{
int l ,r;
}COW; typedef struct
{
int p ,c;
}SP; COW cow[N];
SP sp[N];
int mark[N]; bool camp1(COW a ,COW b)
{
return a.r < b.r;
} bool camp2(SP a ,SP b)
{
return a.p < b.p;
} int main ()
{
int n ,m, i ,j ,k;
while(~scanf("%d %d" ,&n ,&m))
{
for(i = 1 ;i <= n ;i ++)
scanf("%d %d" ,&cow[i].l ,&cow[i].r);
for(i = 1 ;i <= m ;i ++)
scanf("%d %d" ,&sp[i].p ,&sp[i].c);
sort(cow + 1 ,cow + n + 1 ,camp1);
sort(sp + 1 ,sp + m + 1 ,camp2); memset(mark ,0 ,sizeof(mark));
int ans = 0;
for(i = 1 ;i <= m ;i ++)
for(j = 1 ;j <= sp[i].c ;j ++)
{
for(k = 1 ;k <= n ;k ++)
if(!mark[k] && cow[k].l <= sp[i].p && cow[k].r >= sp[i].p)
{
ans ++;
mark[k] = 1;
break;
}
if(k == n + 1)
break;
}
printf("%d\n" ,ans);
}
return 0;
} DINIC #include<queue>
#include<stdio.h>
#include<string.h> #define N_node 2500 + 10
#define N_edge (2500 * 2500 + 5000) * 2 + 100
#define INF 1000000000 using namespace std; typedef struct
{
int to ,cost ,next;
}STAR; typedef struct
{
int x ,t;
}DEP; typedef struct
{
int l ,r;
}COW; typedef struct
{
int p ,c;
}SP; COW cow[N_node];
SP sp[N_node];
STAR E[N_edge];
int list[N_node] ,list2[N_node] ,tot;
int deep[N_node];
DEP xin ,tou; int minn(int x ,int y)
{
return x < y ? x : y;
} void add(int a ,int b ,int c)
{
E[++tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot; E[++tot].to = a;
E[tot].cost = 0;
E[tot].next = list[b];
list[b] = tot;
} bool BFS_Deep(int s ,int t ,int n)
{
memset(deep ,255 ,sizeof(deep));
xin.x = s ,xin.t = 0;
deep[xin.x] = xin.t;
queue<DEP>q;
q.push(xin);
while(!q.empty())
{
tou = q.front();
q.pop();
for(int k = list[tou.x] ;k ;k = E[k].next)
{
int to = E[k].to;
if(deep[to] != -1 || !E[k].cost)
continue;
xin.x = to ,xin.t = tou.t + 1;
deep[xin.x] = xin.t;
q.push(xin);
}
}
for(int i = 0 ;i <= n ;i ++)
list2[i] = list[i];
return deep[t] != -1;
} int DFS_Flow(int s ,int t ,int flow)
{
if(s == t) return flow;
int nowflow = 0;
for(int k = list2[s] ;k ;k = E[k].next)
{
int to = E[k].to;
int c = E[k].cost;
list2[s] = k;
if(deep[to] != deep[s] + 1 || !c)
continue;
int tmp = DFS_Flow(to ,t ,minn(c ,flow - nowflow));
nowflow += tmp;
E[k].cost -= tmp;
E[k^1].cost += tmp;
if(flow == nowflow) break;
}
if(!nowflow) deep[s] = 0;
return nowflow;
} int DINIC(int s ,int t ,int n)
{
int ans = 0;
while(BFS_Deep(s ,t ,n))
{
ans += DFS_Flow(s ,t ,INF);
}
return ans;
} int main ()
{
int n ,m, i ,j;
while(~scanf("%d %d" ,&n ,&m))
{
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= n ;i ++)
{
scanf("%d %d" ,&cow[i].l ,&cow[i].r);
add(0 ,i ,1);
}
for(i = 1 ;i <= m ;i ++)
{
scanf("%d %d" ,&sp[i].p ,&sp[i].c);
add(i + n ,m + n + 1 ,sp[i].c);
} for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= m ;j ++)
if(cow[i].l <= sp[j].p && cow[i].r >= sp[j].p)
add(i ,j + n ,1); printf("%d\n" ,DINIC(0 ,n + m + 1 ,n + m + 1));
}
return 0; }



POJ3614奶牛晒阳光DINIC或者贪心的更多相关文章

  1. [NOIP模拟赛][贪心]奶牛晒衣服.

    奶牛晒衣服(dry) [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任.洗 ...

  2. NOIP模拟赛-奶牛晒衣服(dry)

    一.奶牛晒衣服(dry) [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任 ...

  3. NOIP2012模拟试题【奶牛晒衣服】

    1.奶牛晒衣服(dry) [问题描述] 在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝.熊大妈决定给每个宝宝都穿上可爱的婴儿装.于是,为牛宝宝洗晒衣服就成了很不爽的事情. 圣人王担负起了这个重任 ...

  4. A. 【例题1】奶牛晒衣服

    A . [ 例 题 1 ] 奶 牛 晒 衣 服 A. [例题1]奶牛晒衣服 A.[例题1]奶牛晒衣服 关于很水的题解 既然是最少时间,那么就是由最湿的衣服来决定的.那么考虑烘干机对最湿的衣服进行操作 ...

  5. 洛谷 P1843 奶牛晒衣服

    题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣服就成了很不爽的事情. 题目描述 熊大妈请你帮助完成这个重任 . 洗完衣服后 , 你就要弄干衣服 . 衣服在自然条件下用 ...

  6. [Luogu1843]奶牛晒衣服

    题目大意: 你要晒n件衣服,第i件衣服有w[i]滴水, 每件衣服每秒钟会自然风干a滴水,将这件衣服放入烘干机中每秒钟会烘干a+b滴水. 一秒钟不可以拆开,问晒干所有的衣服至少要多少时间? 思路: 二分 ...

  7. 洛谷——P1843 奶牛晒衣服

    https://www.luogu.org/problem/show?pid=1843#sub 题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣 服就成了很不爽的事情. ...

  8. P1843 奶牛晒衣服

    链接:Miku -------------------------------- 这是一道二分答案的题,我们要二分时间. 对于每件衣服,我们自然是能让它自己蒸发就自己蒸发,这样才是最优的. 那么我闷可 ...

  9. P1843 奶牛晒衣服(二分)

    思路:就是一个模板,只是找最小化而已.在判断函数里面:当湿度<=x*A不判断, 反之sum+=(a[i]-x*A)/B+(a[i]-x*A)%B?1:0; #include<iostrea ...

随机推荐

  1. 关于python中的[::-1],[:,:,::-1]的反转理解

    其实就是单纯的关于反转,我们只需要记住每一个列表的中间有两个冒号: 即[a: b:c],意思是从a到b,间隔是c,因为经常省略c,所以经常看到[a:b]. 一.在一维数据中的反转 import num ...

  2. Office2013安装教程(附安装包+激活工具)

    office2013中文版是微软推出的新一代office办公软件,重点加强了云服务项目,Office2013[☜借你手指用下]采用了全新的Merto界面,使用户更加专注于内容,配合Windows 8的 ...

  3. Apache配置 9.访问控制-Diretory\FileMatch

    (1)介绍 访问控制限制白名单IP,针对文件和目录. (2)目录配置 #vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <Virtua ...

  4. 你只会用 map.put?试试 Java 8 compute ,操作 Map 更轻松!

    今天栈长分享一个实用的 Java 8 开发技能,那就是 Map 接口中增加的 compute 方法,给 Map 集合计算更新用的. compute简介 如下所示,Java 8 在 Map 和 Conc ...

  5. 一种借助POI粗略的标注城市也许重要的区域的方法

    第一部分 很久以前,我住在村子里,因为村子小,所以对村子的一草一木都很熟悉,在熟悉的环境里就很有安全感. 后来我到了大城市,却发现城市太大了,一辈子都熟悉不完. 这个城市的绝大部分地方我都没有去过,就 ...

  6. [倍增]luogu P4155 [SCOI2015]国旗计划

    题面 https://www.luogu.com.cn/problem/P4155 问在环上最少取多少个区间能完全覆盖环 分析 首先发现是环,先把端点变为2n方便处理,注意离散化 其次要删去贡献不如其 ...

  7. 实验一 Python程序设计入门

    学号20184307 2019-2020-2 <Python程序设计>实验1报告 课程:<Python程序设计> 班级: 1843 姓名: 章森洋 学号:20184307 实验 ...

  8. CentOS7使用NTP搭建时间同步服务器

    前言 为什么要搭建时间同步服务器呢?场景是这样的. 我们有两台CentOS服务器,其中一台是可以连接外网的,下文中我们称它为A服务器,另一台不能连接外网,但是与A服务器在同一局域网中,下文中我们称它为 ...

  9. DDD实战让中台和微服务的落地如虎添翼

    微服务到底怎么拆分和设计才算合理,拆多小才叫微服务?有没有好的方法来指导微服务和中台的设计呢? 深入DDD的核心知识体系与设计思想,带你掌握一套完整而系统的基于DDD的微服务拆分与设计方法,助力落地边 ...

  10. c++排序相关的参数“cmp“的用法及理解

    对sort函数(需要algorithm头文件),它的cmp可以是"函数",也可以是"对象" bool myfunction (int i,int j) { re ...