於我而言,今年的noi簡直殺人。即使我只考了第一天,我就崩潰了。
還是我太菜,我自己而言,我最多得五分不能再多了。後來交了**確實只有五分。
反正大家知道我菜就對了。
有 n 個點和 m 趟列車,第 i 輛列車於 pi 時刻從 xi 號點出發,於 qi 時刻到達 yi 號點。
有乙隻小貓要從 1 號點坐車到 n 號點,中途可能需要在某些站等待一段時間。每次 t 個時刻的等待,都會使小貓的煩躁值加 ax2+bx+c(a,b,c 為給定的全域性常數)。假設最後它在第 z 個時刻到達終點,它的煩躁值會再加 z。
求小貓到達終點所需的最小煩躁值。
這是濃縮版,原題面看的我想砸鍵盤,實在特別長,對我來說簡直是精神攻擊,非常難受。簡潔了一下大概就這意思。
(**於大佬的部落格寫的很好很詳細,我有一定參考)
原題目詳見洛谷:傳送門
題面就是要哭的節奏,雖然有大佬說是水題 ,就是裸的dp 。
寫不出dp方程,做不來優化,秒秒哭。
主要突破點在這個式子上。
我們先將問題簡化,只考慮過程,不考慮位置的限制條件。
寫出煩躁值dp方程(只能對應一條路徑),則有:
巨佬們統一認證運用線性優化,我大概明白怎麼回事。但是完全不會用怎麼辦!
具體思路詳見洛谷題解。我沒看懂。
所以正解涼掉。
但是錯誤暴力的 方法可以磕到100,所以我們要堅持暴力上省隊
我們先將火車按照出發時間排序。
然後就過了。noi的資料怎麼這麼水啊喂!
附**:(這波暴力我給滿分)
#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
struct node
}a[200100];
int n,m,a,b,c,t,ans;
int f[
100100][
1010];
intcalc
(int x)
intmain()
memset
(f,0x3f
,sizeof
(f))
; f[1]
[0]=
0;sort
(a+1
,a+m+1)
;for
(int i=
1;i<=m;i++
)for
(int j=
0;j<=a[i]
.p;j++
)int ans=inf;
for(
int i=
0;i<=t;i++
) ans=
min(ans,f[n]
[i]+i)
;printf
("%d\n"
,ans)
;}
NOI2019 回家路線
點此看題 首先可以用暴力dpdp dp艹過去,設dp i j dp i j dp i j 為到了i ii點的時間是j jj的最小花費,由於時間是單向流逝的,我們可以先把邊按出發時間排序,用邊轉移,列舉到達出發點的時間jjj d p y i q i dp x i j cost p i j dp y i...
NOI2019 回家路線
link solution 演算法一通過觀察範圍發現 q leq1000 所以直接暴力拆點 dp 時間複雜度 o 1000m o 能過 演算法二因為有 a times x 2 b times x c 考慮斜率優化。設 f i 表示走完第 i 條邊的最小煩躁值,則 f i min space u i ...
LOJ 3156 NOI2019 回家路線
傳送門 明明可以bfs bfsbf s寫了個dij dijdi j把自己強行玩wawa wa有2種做法 第一種 考慮對於同乙個點的入邊i,j i,ji,j轉移給出邊xxx 把式子列出來後發現是乙個標準的斜率優化 在凸包上二分就可以了 複雜度o m logm o mlogm o mlog m 第二種 ...