codevs3037 線段覆蓋5
不懂某些人為什麼要用bit = = 。這樣會帶壞小朋友的啊喂(雖然說刷到大師了寫個bit就是一分鐘的事)。不過你強行加個log會很慢的阿喂,何況這題的log大概是20。其實我寫的也不好= =並沒有1a而且錯誤還比較多l是左端點 val是價值 這不就是個裸的揹包嗎???寫揹包的時候還寫個bit求最大值?並沒有批判的意思啊只是覺得應該多想想。因為每條線段只會在右端點被列舉到一次,所以dp的時間複雜度是o(離散化後端點數+線段數)。所以這題主要複雜度在離散化上= =我離散寫的比較拙劣。dp[i]表示到離散化之後的端點i之前最大價值。然後把線段按右端點排序,然後轉移方程是這樣的
dp[i]=max( dp[ i - 1 ] , dp[ l [ k ] ] + val[ k ])
//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...