codevs3037 線段覆蓋5 離散化DP

2021-07-23 16:31:02 字數 784 閱讀 4577

codevs3037 線段覆蓋5

不懂某些人為什麼要用bit = = 。這樣會帶壞小朋友的啊喂(雖然說刷到大師了寫個bit就是一分鐘的事)。不過你強行加個log會很慢的阿喂,何況這題的log大概是20。其實我寫的也不好= =並沒有1a而且錯誤還比較多

dp[i]表示到離散化之後的端點i之前最大價值。然後把線段按右端點排序,然後轉移方程是這樣的

dp[i]=max( dp[ i - 1 ] , dp[ l [ k ] ] + val[ k ])

l是左端點 val是價值 這不就是個裸的揹包嗎???寫揹包的時候還寫個bit求最大值?並沒有批判的意思啊只是覺得應該多想想。因為每條線段只會在右端點被列舉到一次,所以dp的時間複雜度是o(離散化後端點數+線段數)。所以這題主要複雜度在離散化上= =我離散寫的比較拙劣。

//qwsin

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1000000+10;

typedef

long

long ll;

inline ll read()

ll x[maxn*2],dp[maxn*2];

struct line

}l[maxn];

int main()

}cout

0;}

CODEVS 3037 線段覆蓋 5

描述 數軸上有n條線段,線段的兩端都是整數座標,座標範圍在0 10 18,每條線段有乙個價值,請從n條線段中挑出若干條線段,使得這些線段兩兩不覆蓋 端點可以重合 且線段價值之和最大。分析 提供兩種思路 利用離散化.因為這道題本來就是離散化的例題.將點排序後依次賦值 1 2n,n為線段的條數 再通過結...

Codevs 線段覆蓋1 2 3 4 5

對於線段覆蓋1 3,貪心,每次選取末端點靠前的,o n 掃一遍即可 話說這個題似乎排序最佔時間 當然dp也可以 include include define maxn 1000000 5 using namespace std struct line l maxn int main sort l 1...

codevs線段覆蓋 動態規劃

題目描述 description 給定x軸上的n 0輸入描述 input description 輸入第一行是乙個整數n。接下來有n行,每行有二個空格隔開的整數,表示一條線段的二個端點的座標。輸出描述 output description 輸出第一行是乙個整數表示最多剩下的線段數。樣例輸入 samp...