思路:dp(i)表示前i個專案的最大收益,轉移方程很好寫dp(i) = max,val(i)表示第i個專案的價值,dp(k)表示前k個的最佳收益,k滿足ed(k) <= st(i),並且是最接近st(i)的那個專案,即i需要找到乙個可以相容的專案,因此需要對所有專案按照結束時間公升序排序。但是不容忽略的是當結束時間相同的時候需要按照開始時間公升序排序。
因為如果出現這組資料: 2
5 5 10
1 5 13
很明顯答案是:23,但是如果不按照開始時間排序就無法得到正確答案。
ac**
#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#pragma comment(linker, "/stack:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define pi pairtypedef long long ll;
const int maxn = 5000 + 5;
int dp[maxn];
struct node
}a[maxn];
int bin_search(int x, int y, int tim)
return x-1;
}int main()
sort(a, a+n);
dp[0] = a[0].val;
for(int i = 1; i < n; ++i)
printf("%d\n", dp[n-1]);
} return 0;
}
如有不當之處歡迎指出!
NYOJ 720 專案安排(DP)
click here 題意 給出 n 個區間 a,b 每個區間有個權值 wi,如何取不相交的區間,使權值最大。解題思路 估計是一道很經典的題目,目前學習了三種解法。1 如果區間範圍比較小,例如 zoj 3637。則可以用 dp i 表示考慮到數軸中 i 點時的最大值。存區間的時候,不再存入結構體,而...
NYOJ 720 專案安排
題目資訊 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 小明每天都在開源社群上做專案,假設每天他都有很多專案可以選,其中每個專案都有乙個開始時間和截止時間,假設做完每個專案後,拿到報酬都是不同的。由於小明馬上就要碩士畢業了,面臨著買房 買車 給女友買各種包包的鴨梨,但是他的...
九度 1499 專案安排 一維DP
題目描述 總結 1.和 leetcode palindrome cut 的設定方法類似 2.時間複雜度為 o n 2 n 為任務個數 3.為了優化空間複雜度 同時也優化時間複雜度 dp i 表示第 i 個任務的開始時間到 endtime 之間能夠獲得的最大收益 source.cpp created ...