洛谷P2207 Photo

本文介绍了解决洛谷P2207Photo问题的一种方法,通过将奶牛之间的关系抽象为区间选择问题,并使用一种类似于贪心的策略(实际为模拟)来解决。该算法首先对区间的右端点进行排序,然后尽可能地选择不相交的区间,最终求得最少的选择数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

洛谷P2207 Photo
关于这题 比如奶牛 i 与 奶牛 j 关系不好 强制 i < j
那么我们就将其抽象成 区间 i--j 中必须选择一个点
最少需要选择几个点,然后yy一下可以发现答案其实就相当于就是
最多能选择几段互不干扰的区间,(但我不会严格证明 )然后就可以贪心

按右端点排序 能取就取

其实也不能说是贪心吧,只是模拟而已,一直取完为止

 1 #include <bits/stdc++.h> 
 2 #define For(i,j,k) for(int i=j;i<=k;i++) 
 3 using namespace std ; 
 4 
 5 const int N = 1011 ; 
 6 struct node{
 7     int s,t ; 
 8 }a[N];
 9 int n,K ; 
10 inline int read() 
11 {
12     int x = 0 , f = 1 ; 
13     char ch = getchar() ; 
14     while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar() ; } 
15     while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar() ; } 
16     return x * f ;  
17 }
18 
19 inline bool cmp(node a,node b)
20 {
21     if(a.t!=b.t) return a.t < b.t ; 
22     return a.s < b.s ; 
23 }
24 
25 int main() 
26 {
27     K = read() ; n = read() ; 
28     For(i,1,n) {
29         a[i].s = read() , a[i].t = read() ; 
30         if(a[i].s>a[i].t) swap(a[i].s,a[i].t) ; 
31     }
32     sort(a+1,a+n+1,cmp) ; 
33     int last = a[1].t , cnt = 1 ;
34     For(i,2,n) 
35         if(a[i].s>last) cnt++,last=a[i].t ; 
36     printf("%d\n",cnt+1) ; 
37     return 0 ; 
38 }

 

转载于:https://www.cnblogs.com/third2333/p/7629300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值