一條街的一邊有幾座房子。因為環保原因居民想要在路邊種些樹。路邊的地區被分割成塊,並被編號為1..n。每個塊大小為乙個單位尺寸並最多可種一棵樹。每個居民想在門前種些樹並指定了三個號碼b,e,t。這三個數表示該居民想在b和e之間最少種t棵樹。當然,b<=e,居民必須保證在指定地區不能種多於地區被分割成塊數的樹,即要求t<=e-b+1。允許居民想種樹的各自區域可以交叉。出於資金短缺的原因,請你求出滿足所有居民要求前提下,需要種樹的最少數量。
第一行為n,表示區域的個數;
第二行為m,表示房子的數目;
接下來m行描述居民的需要:b e t (0 < b <= e <= 30000,r <= e-b+1) 分別用乙個空格分開。
輸出僅乙個整數,即滿足所有需要最少種樹的數量。
9 4
1 4 2
4 6 2
8 9 2
3 5 2
30%的資料滿足1<=n<=1000;1<=m<=500
100%的資料滿足n<=30000;m<=5000
貪心或差分約束
同[bsoj1271] 序列長度
不解釋了
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
inline
const
int get_int()
while(x>='0'&&x<='9')
return num*bj;
}#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
inline
const
int get_int()
while(x>='0'&&x<='9')
return num*bj;
}const
int maxn=50005;
struct edge ;
struct difference_constraints
void addedge(int from,int to,int dist) );
m=edges.size();
g[from].push_back(m-1);
}void insert(int x,int y,int v,bool flag)
bool spfa(int s) }}
}return
true;
}bool main(int start)
void output()
};int n,m;
difference_constraints dc;
int main()
for(int i=1; i<=n; i++)
dc.addedge(n+1,0,0);
if(dc.main(n+1)==0)
printf("%d\n",dc.ans[n]);
return
0;}
洛谷 P1250 種樹 貪心
一條街的一邊有幾座房子。因為環保原因居民想要在路邊種些樹。路邊的地區被分割成塊,並被編號成1.n。每個部分為乙個單位尺寸大小並最多可種一棵樹。每個居民想在門前種些樹並指定了三個號碼b,e,t。這三個數表示該居民想在b和e之間最少種t棵樹。當然,b e,居民必須記住在指定區不能種多於區域地塊數的樹,所...
洛谷P1250種樹(貪心)
一條街的一邊有幾座房子。因為環保原因居民想要在路邊種些樹。路邊的地區被分割成塊,並被編號成1.n。每個部分為乙個單位尺寸大小並最多可種一棵樹。每個居民想在門前種些樹並指定了三個號碼b,e,t。這三個數表示該居民想在b和e之間最少種t棵樹。當然,b e,居民必須記住在指定區不能種多於區域地塊數的樹,所...
20190709種樹(洛谷P1250)
題目描述 一條街道的一邊有幾座房子,因為環保原因居民想要在路邊種些樹,路邊的居民被分割成 n 塊,並被編號為 1 n。每塊大小為乙個單位尺寸並最多可種一棵樹。每個居民想在門前種些樹並指定了三個數b,e,t。這三個數分別表示該居民想在b和e之間最少種t棵樹,當然b e,t e b 1,允許居民想種樹的...