洛谷1250 種樹

2021-07-25 07:09:38 字數 1735 閱讀 5034

一條街的一邊有幾座房子。因為環保原因居民想要在路邊種些樹。路邊的地區被分割成塊,並被編號為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,允許居民想種樹的...