線段覆蓋 codevs3027 dp

2021-07-15 04:56:49 字數 751 閱讀 4686

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

n<=1000

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

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

輸出能夠獲得的最大價值

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

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

0<=ai,bi<=1000000

0<=ci<=1000000

不得不說排序真的爽,一行搞定也是掛逼一般的存在

典型的dp不說了,每次找不重合的最大價值狀態轉移 f[

i]=m

ax+w

[i]且

(0<

j

#include 

#include

using

namespace

std;

struct line

;line a[1001];

int f[1001];

int ans=0;

bool cmp(line x,line y)

f[i]+=max+a[i].w;

ans=f[i]>ans?f[i]:ans;

}printf("%d\n",ans);

return

0;}

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 3027 線段覆蓋 2

數軸上有n條線段,線段的兩端都是整數座標,座標範圍在0 1000000,每條線段有乙個價值,請從n條線段中挑出若干條線段,使得這些線段兩兩不覆蓋 端點可以重合 且線段價值之和最大。n 1000 第一行乙個整數n,表示有多少條線段。接下來n行每行三個整數,ai bi ci,分別代表第i條線段的左端點a...