wikioi 3027 線段覆蓋 2

2021-06-18 14:01:20 字數 1018 閱讀 5365

數軸上有n條線段,線段的兩端都是整數座標,座標範圍在0~1000000,每條線段有乙個價值,請從n條線段中挑出若干條線段,使得這些線段兩兩不覆蓋(端點可以重合)且線段價值之和最大。

n<=1000

第一行乙個整數n,表示有多少條線段。

接下來n行每行三個整數, ai bi ci,分別代表第i條線段的左端點ai,右端點bi(保證左端點《右端點)和價值ci。

輸出能夠獲得的最大價值

3

1 2 1

2 3 2

1 3 4

4

資料範圍

對於40%的資料,n≤10;

對於100%的資料,n≤1000;

0<=ai,bi<=1000000

0<=ci<=1000000

#include #include using namespace std;

struct node

line[1005];

int cmp(const node x, const node y)

int main()

sort(line, line+n, cmp);

int max = 0;

for(int i=1; i=line[j].b)

{if(k題解:序列型動態規劃。

第一,按線段右端點由小到大的順序排序;

第二,line[i].c = line[i].c + k;其中k為第i條線段(不包括)之前的線段中滿足不覆蓋條件的最大值,並以此設定前i條線段(包括第i條)可得到的最大值(即前面式子中二者的和)。

第三,從line[0].c到line[n-1].c中找到最大值,即為所求。

3027 線段覆蓋 2

剛開始我寫這道題目,我的狀態轉移方程式是 dp i i dp i k dp k 1 j 後來才發現 測試資料太大,會導致超時。接著我又重新梳理了解題的思想,直接遍歷一邊可以多選的選項,然後接著用乙個max值儲存最大的價值,題目便ac了 先貼出我錯誤的 include using namespace ...

3027 線段覆蓋 2

題目描述 description 數軸上有n條線段,線段的兩端都是整數座標,座標範圍在0 1000000,每條線段有乙個價值,請從n條線段中挑出若干條線段,使得這些線段兩兩不覆蓋 端點可以重合 且線段價值之和最大。n 1000 輸入描述 input description 第一行乙個整數n,表示有多...

wikioi 線段覆蓋 2

有個小錯誤調了半天,最終發現sort line,line n 錯了,後面那個是exclusive的,所以要line n 1。按照右端點從小到大排序。原因是迴圈結構中是i從1到n,i比較小的時候盡可能選右端點比較小的,這樣才可以為後面的線段留下更大的空間。f i 表示 算前i條線段時,選上第i條線段,...