麗娃河是華師大著名的風景線。但由於學校財政緊缺,麗娃河邊的路燈年久失修,一到晚上就會出現走在河邊要打著手電的情況,不僅非常不方便,而且影響安全:已經發生了大大小小的事故多起。
方便起見,麗娃河可以看成是從 1 到 n 的一條數軸。為了美觀,路燈只能安裝在整數點上,每個整數點只能安裝一盞路燈。經專業勘測,有 m 個區間特別容易發生事故,所以至少要安裝一定數量的路燈,
請問至少還要安裝多少路燈。
input
第一行乙個整數 t (1≤t≤300),表示測試資料組數。
對於每組資料:
•第一行三個整數 n,m,k (1≤n≤103,1≤m≤103,1≤k≤n)。
•第二行 k 個不同的整數用空格隔開,表示這些位置一開始就有路燈。
•接下來 m 行表示約束條件。第 i 行三個整數 li,ri,ti 表示:第 i 個區間 [li,ri] 至少要安裝 ti 盞路燈 (1≤li≤ri≤n,1≤ti≤n)。
output
對於每組資料,輸出 case x: y。其中 x 表示測試資料編號(從 1 開始),y 表示至少要安裝的路燈數目。如果無解,y 為 −1。
examples
input
3 5 1 3
1 3 5
2 3 2
5 2 3
1 3 5
2 3 2
3 5 3
5 2 3
1 3 5
2 3 2
4 5 1
output
case 1: 1
case 2: 2
case 3: 1
思路:對於這題,我們可以考慮用貪心來做(用vis來存路燈的放置情,0表示沒有燈,1表示有),首先對m個區間以右端點從小到大進行排序,然後遍歷一遍每個區間,算出還需放置的路燈數,然後從最右端開始依次向左放置,如果i位置上沒有路燈,sum++,然後將vis[i]標記為1表示放置乙個路燈。最後的結果即為sum。
**如下
#include
#include
#include
#include
#include
using
namespace
std;
int vis[1005];
struct node
e[1005];
bool cmp(node a,node b)
int flag=1;
for(int i=0;iscanf("%d%d%d",&e[i].l,&e[i].r,&e[i].cost);
if(e[i].r-e[i].l+1
//如果區間長度小於要求的路燈數,則無解
flag=0;
}sort(e,e+m,cmp);
printf("case %d: ",t);
if(flag==1)
j--;}}
printf("%d\n",sum);
}else
printf("-1\n");
}}
2017華東師範大學網路賽 C
time limit per test 1.5 seconds time limit all tests 10.0 seconds memory limit 256 megabytes 袋鼠媽媽找不到她的孩子了。她的孩子被怪獸抓走了。袋鼠媽媽現在在地圖的左上角,她的孩子在地圖第 x 行第 y 列的位...
袋鼠媽媽找孩子 2017 華東師範大學網賽
思路 剛開始以為直接dfs搜尋到終點就可以了。我是剛開始將陣列全都定義為 然後深搜一條路。搜一步就將那一步改為 但是這樣會走出四個粘在一起的格仔,那裡就算四步,實際上那裡不是四步。後來想了下。得判斷什麼格仔可以走什麼格仔不可以走,乙個格仔只有到那裡的那個方向是 其餘三個都是 才能走。思路僅供參考不知...
2023年華東師範大學網路賽 E
e.黑心啤酒廠 time limit per test 1.0 seconds time limit all tests 1.0 seconds memory limit 256 megabytes accept submit 1184 4093 黑心啤酒廠為了讓大家買啤酒,會把一瓶酒設計成恰好能倒...