Gym 100829S surf 動態規劃的優化

2022-08-13 09:45:08 字數 1303 閱讀 9379

題目大意是,非你若干個任務,任務分別對應開始時間、預期收益、持續時間三項指標,讓你從中選擇乙個受益最大的方案(沒有開始時間相同的任務)。

於是,標準狀態轉移方程應當為,設dp[k]為選擇了前k個任務的最大收益,後面轉移為dp[k+1]=max且能夠共存的(dp[i]);很容易想到n^2的暴力更新,但是這題數量太大,會炸得連渣都不剩。於是需要優化到較低的數量級(比如nlogn)

注意到,我們也許不用對某個任務來選取前k個的最大值,不容易想到優化但是想想劉汝佳同志的話——不方便直接求解的時候想想更新狀態看看,於是就變成了狀態更新公式而不是狀態轉移方程。——對於求得的dp[k]更新所有合法 的,大於k的dp值。注意到,當前序列已經經過了排序,所以,當找到第乙個合法的dp[p]p>k時候,就會有p+1也是合法的狀態,因此很容易想到樹狀陣列相對最大值+二分查詢確定位置(只要有比較函式就可以寫二分)。最後複雜度是nlogn。

另外根據某些奇怪的樹上的書法,,任何乙個動態規劃的優化演算法都應當從如下三個狀態進行考慮:

1、狀態總數        n    n

2、決策數         n    1

3、狀態轉移時間複雜度   1    logn

分別對應原始dp和優化後的dp

ac**如下:考慮到沒有校園網所以在vj上面交的。。。於是投籃用了萬能標頭檔案,好孩子不要學我喲~

#includeusing

namespace

std;

const

long

long maxn=300233

;class

mession

;mession messions[maxn];

long

long

tree[maxn];

long

long

dp[maxn];

long

long

n;void insert(int pos,long

long

key)

}long

long getsum(int

pos)

return

ans;

}bool

cmp(mession m1,mession m2)

void

init()

sort(messions+1,messions+n+1

,cmp);

long

long ans=0

;

for(int i=1;i<=n;++i)

cout

}int

main()

gym初級 初始gym環境(二)

import gym env gym.make cartpole v0 print env.action space print env.observation space 輸出結果為 discrete 2 box 4,意思是動作空間中的動作是離散 discrete 的2個動作,狀態空間中的狀態是4...

gym訓練記錄

upd 12.18 老年選手也該看看歐洲的acm了,不然以後就再也沒有機會了 problem a 挺牛逼的結論,與y軸平行的直線最多隻會經過 o log c 個點,拿乙個線段樹維護一下每個x對應哪些圓即可。複雜度 o n log n log c o n problem b 對每種圖討論即可 prob...

gym 倒立擺學習

參考資料 import gym 匯入模組 from policynet import policygradient import matplotlib.pyplot as plt import time display reward threshold 1000 render false 建立乙個環...