#32290: 解題報告


dfd8282@gmail.com (fishhh)

學校 : 嘉義市私立嘉華高級中學
編號 : 99760
來源 : [140.114.216.99]
最後登入時間 :
2024-10-27 14:56:56
b172. 雷曼兔 -- 2008海峽兩岸青少年程式設計競賽 | From: [111.242.123.149] | 發表日期 : 2022-09-27 01:23

最開始,題目有說 數字範圍從1~ n*n 每個數字出現一次

所以我會開個pair陣列 叫pos 儲存每個數字的座標

然後建一個表 int ans[n*n] 顧名思義 用來存答案(誤

其實ans是用來存 跳到當前數值的最高華麗度 (不懂沒關係? 看下面操作

 

要先想到一件事 假設我今天要算 從最高點跳到第i點的最大華麗度 那我的答案將會是

max(ans[n*n]+dis(pos[n*n],pos[i]),ans[n*n-1]+dis(pos[n*n-1],pos[i]).........ans[i+1]+dis(pos[i+1],pos[i]))

// 因為第i點只能從比他高的地方跳過來

那我們要如何知道比他大的點的ans們(ans[n*n],ans[n*n-1].......ans[i+1])到底是多少

很簡單

ans[n*n] 必定是0

ans[n*n-1] 一定是從ans[n*n]來的 那就直接代公式就可以得到

以下的點一樣類推就好

複雜度  O(n^3)

 

不知道各位大神有沒有更好的解法orz

 
ZeroJudge Forum