被踩計畫 題解 NOI2020 美食家

2022-03-30 08:28:03 字數 939 閱讀 3760

為什麼叫被踩記錄呢?因為感覺自己之前真的是太菜了,打算把之前聯賽等考過的題目做一做,看看自已以前有多菜,所以取名叫被踩記錄。

題目鏈結

發現 \(t\) 很大而 \(n\) 很小,顯然可以使用矩陣快速冪來優化 dp ,但是有幾個問題。

首先是 \(w\) 並不都為 \(1\) ,考慮拆點,把乙個點拆成 \(\max(w)\) 個點,如果 \(u\) 向 \(v\) 連了長度為 \(w\) 的邊,那麼就從 \(u\) 拆出來的第 \(w\) 個點向 \(v\) 連邊。

然後就是有美食節,這個很簡單處理,把所有美食節按時間排序,然後從早到晚依次處理每次美食節,美食節之間的跳躍就用矩陣快速冪優化就行了。

dp 狀態和轉移就不用說了。

#include#include#include#include#define ch() getchar()

#define pc(x) putchar(x)

using namespace std;

templatevoid read(t&x)

templatevoid write(t x)

const int maxn=255,maxk=205;

int n;

struct matrix

matrix operator * (const matrix o)const

}base[32];

struct qu

bool operator < (const qu o)const

}memcpy(dp,tmp,sizeof tmp);

}} dp[q[s].x]+=q[s].y;

tim=q[s].t;

} if(dp[1]>=0)write(dp[1]),pc('\n');

else puts("-1");

return 0;

}

NOI2020 美食家 題解

題意分析 給出乙個帶權有向圖,要求從節點 1 出發,經過恰好 t 的邊權和,回到節點 1 求可經過的最大點權和。特別地,經過的邊權和達到部分特殊數時,會有某個點的點權發生改變。思路分析 樸素演算法 設 f 表示在節點 j 經過的邊權和為 i 時可經過的最大點權和。很容易可以得出 dp 方程 f ma...

NOI2020 簡要題解

a 首先不難發現乙個暴力動態規劃的做法 記 f 表示第 i 天 當前在第 j 座城市所獲得的最大收益 有轉移方程 f max u cost i extra 發現 w 非常小 考慮拆點。將每個點拆成 w 個點 那麼一共會有至多 5n 個點。接著 考慮矩陣乘法 事實上 將求和運算改為 max 運算 並將...

NOI2020 製作菜品 題解

題意分析 給出 n 個數和 m 個 k 可以某些 k 拆兩個正整數,使得拆後的數可以拼成給出的 n 個數。思路分析 上面的解釋是因為這樣寫比較方便,實際上按照題意應該是用 n 個數拆分拼成 m 個 k 觀察資料範圍,發現有 m geq n 2 的限制和 m geq n 1 的部分分,考慮從這裡切入分...