NOI題解DAY1 1 回家路線

2021-09-26 10:06:57 字數 1679 閱讀 2701

於我而言,今年的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 第二種 ...