我来总结一下最常用的两种办法

1.贪心

2.差分约束

那么我们先来讲,贪心版《种树》

大家可能知道有一个题和这个类似,那个是钉钉子而这个是种树

我们可以借用钉钉子的思路来想,首先这个是让你求最小值,而且每个人都有自己划定的区间,并且他们还要求在这段区间内最少种T棵树。

那么我们既要满足最少种树数,而且要满足每个人的要求。好在的是,题目中说过区间和区间之间可能会有一段重叠,那么我们要抓住这个机会尽可能多的在每一段重复区间内多种树,所以就会产生一个连锁反应,就是上一个重复区间内种的树可能会满足下一个人的要求,那么这个人就可以略过去,以达到最少数的目的。

(以下是贪心代码,体会一下)

#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n,m,ans=;
bool u[N]={};
struct Edge{
int x,y,z;
}a[N];
bool cmp(Edge a,Edge b)
{
return a.y<b.y;
}
int main()
{
cin>>n>>m;
for(int i=;i<=m;i++)
cin>>a[i].x>>a[i].y>>a[i].z;
sort(a+,a+m+,cmp);
for(int i=;i<=m;i++)
{
int sum=;
for(int j=a[i].x;j<=a[i].y;j++)
if(u[j]) sum++;//统计已有的数量
if(sum>=a[i].z) continue;//满足就继续
for(int k=a[i].y;k>=a[i].x;k--)//不满足情况
{
if(!u[k])
{
u[k]=;
sum++;
ans++;//答案++
if(sum==a[i].z) break;//直到满足,退出
}
}
}
cout<<ans;//输出最后答案(即最少的树的数量)
return ;
}

接下来我们讲,差分约束版《种树》

我们都知道差分约束是用于最短路不等式问题的

这里我们利用差分约束解决最短路不等式的性质来看

我们想在区间内种最少的树,所以根据性质

我们可以列出两个差分约束公式

1.sum[x]-sum[y-1]>=c;(这里是指在区间[y,x]中至少种c棵树)

2.0<=sum[x]-sum[x-1]<=1;(这里是指一个单位长度内最多种1棵树)

根据公式,我们可以建边,但是建边是y+1->y=-1而不是y->y+1=1

建好边我们就可以跑一边SPFA啦,最少种树数也就出来了!

(差分约束代码,体会一下)

#include<bits/stdc++.h>
using namespace std;
const int N = ;
const int M = ;
int n,m;
int dis[N];
bool vis[N];
int head[N],num;
struct Edge{
int to,next,w;
}s[M];
void add(int u,int v,int w)//根据公式建边
{
s[++num].w=w;
s[num].next=head[u];
head[u]=num;
s[num].to=v;
}
void spfa(int x)//SPFA经典操(ban)作(zi)
{
queue<int> q;
q.push(x);
for(int i=;i<=n+;i++)
dis[i]=;
dis[x]=;vis[x]=;
while(!q.empty())
{
int g=q.front();
q.pop();
vis[g]=;
for(int i=head[g];i!=-;i=s[i].next)
{
int t=s[i].to;
if(dis[t]>dis[g]+s[i].w)
{
dis[t]=dis[g]+s[i].w;
if(!vis[t])
{
q.push(t);
vis[t]=;
}
}
}
}
}
int main()
{
int a,b,c,minn=;
memset(head,-,sizeof(head));
cin>>n>>m;
int y=n+;
for(int i=;i<=n;i++) add(y,i,);
for(int i=;i<=m;i++)
{
cin>>a>>b>>c;
add(b,a-,-c);
}
for(int i=;i<=n;i++)//建边操作
{
add(i-,i,);
add(i,i-,);
}
spfa(y);
for(int i=;i<=n;i++)//取最小值
minn=min(minn,dis[i]);
cout<<dis[n]-minn<<endl;
return ;
}

烟雨江南,无你何欢!

luogu P1250 种树的更多相关文章

  1. P1250 种树

    P1250 种树 题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定 ...

  2. Java实现洛谷P1250 种树 (暴力)

    P1250 种树 输入输出样例 输入 9 4 1 4 2 4 6 2 8 9 2 3 5 2 输出 5 PS: 我种最少的树,意味着我的树要最多的被利用,意味着,我的树要尽可能的靠中间种, 也就是我把 ...

  3. P1250 种树(差分约束 / 贪心)

    题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1-N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E,T ...

  4. Luogu 1484 种树

    Luogu 1792 算是双倍经验. 我们考虑对于一个点,我们要么选它,要么选它周围的两个点. 所以我们考虑用一个堆来维护,每次从堆顶取出最大值之后我们把它的权值记为:它左边的权值加上它右边的权值减去 ...

  5. 洛谷P1250种树(贪心)

    题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E, ...

  6. P1250 种树 题解

    题目描述 一条街道的一边有几座房子,因为环保原因居民想要在路边种些树,路边的居民被分割成 n 块,并被编号为 1…n.每块大小为一个单位尺寸并最多可种一棵树.每个居民想在门前种些树并指定了三个数b,e ...

  7. HDU 1384 Intervals &洛谷[P1250]种树

    差分约束 差分约束的裸题,关键在于如何建图 我们可以把题目中给出的区间端点作为图上的点,此处应注意,由于区间中被标记的点的个数满足区间加法,这里与前缀和类似,对于区间[L..R]来说,我们加入一条从L ...

  8. 题解——洛谷P1250 种树(差分约束)

    一道看一眼就知道差分约束的题目 但是最短路spfa的时候注意松弛条件是 if(dis[u]+w[i]<dis[v[i]]) dis[v[i]]=dis[u]+w[i]; 不能写成 if(dis[ ...

  9. Luogu P1484 种树

    这道题目还是比较简单的 首先题目的意思就让我们很轻易地想到DP 我们设f[i][j]表示前i个坑中种j棵树的最大利益,则有: f[i][j]=max(f[i-1][j],f[i-2][j-1]+a[i ...

随机推荐

  1. 【20190305】CSS-响应式图片:srcset+sizes,picture,svg

    响应式图片可以根据不同的设备屏幕大小从而选择加载不同的图片,从而节省带宽.实现响应式图片有三种方法:srcset+sizes属性.picture标签.svg 1. srcset+sizes srcse ...

  2. ios屏幕怎么投屏到电脑显示器

    iphone在国内一直都很受欢迎,为什么这么受欢迎呢?其实苹果手机操作系统非常的新颖,让人对手机有了重新的认识.但是ios屏幕怎么投屏到电脑显示器.感兴趣的一起阅读下面的内容吧! 使用工具: 苹果手机 ...

  3. 轨迹系列7——Socket总结及实现基于TCP或UDP的809协议方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...

  4. Snapde怎么添加行和列

    Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏.那么它是如何添加行列的呢? 它有三种方法可以添加: 1.在编辑下拉菜单下找到设置行列数菜 ...

  5. Android 通过反射获取DatePicker 中的控件,并改变其颜色

    到最后也只是成功改变了中间部分的颜色. private void setDatePickerDividerColor(DatePicker datePicker) { // Divider chang ...

  6. C#的自动拼接Sql语句Insert方法及思路

    思路: 1.想想插入语句,大概是这样的一个框架:INSERT INTO 表名 (数据库列名) values (值) 2.这里要3个变量是不固定的,分别是:表名.数据库列名.值: a.表名我们这里很容易 ...

  7. python开发规范和(configparser、random模块)

    目录结构: bin:存放程序入口,程序启动文件. conf:存放配置文件,配置文件主要是一些全局变量,路径信息等. core:程序核心文件,不涉及到业务逻辑. app:存放和系统业务相关的逻辑. db ...

  8. win10 anaconda+tensorflow+keras

    最近想用python实现下lstm模型,然后看网上教程配置了下环境,中间出现了一些问题,记录下. 1.开始menu中anaconda文件夹下没有ipython的图标了. 我电脑里的anaconda是很 ...

  9. LeetCode算法题-Reverse Words in a String III(Java实现)

    这是悦乐书的第259次更新,第272篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第126题(顺位题号是557).给定一个字符串,您需要反转句子中每个单词中的字符顺序,同 ...

  10. Python基础之迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...