1. 程式人生 > 其它 >Neural Collaborative Filtering——論文解讀

Neural Collaborative Filtering——論文解讀

DP

用於解決某些問題,可以由某一個狀態 弄到下一個狀態

例題:

XCPC
Description

2020年12月13日,Jiang,Ying和Song組隊報名參加了XCPC程式設計競賽。賽前他們約定,Jiang寫最前面的題,Ying寫

中間的題,Song寫最後的題,每個人寫的題都是連續的(比如總共5題,Jiang寫1、23,Ying寫4,Song寫5)。

比賽開始時,三人手中各有k1, k2, k3道題,但題號是亂的。現在他們需要把一些題轉交給其他人,

使得最終每個人手中的題符合賽前約定。最終可能有人一題不寫。求最少轉交題目次數。


Input
第一行3個整數 k1, k2, k3  ( 
1 \leq k1, k2, k3 \leq 2 * 10^5)(1≤k1,k2,k3≤210 5 ) 第二行k1個整數,表示Jiang一開始拿到的k1道題 第三行k2個整數,表示Ying一開始拿到的k2道題 第四行k3個整數,表示Song一開始拿到的k3道題 保證每個題號各不相同且位於[1, k1+k2+k3]之間 Output 一行一個整數,表示最少轉交題目次數。 Sample Input 1 2 1 3 5 6 4 3 1 2 Sample Output 1 3 Hint 樣例解釋:把第4、5、6題都交給第三個人。
View Code

方法:

3個人編號0、1
2 用problem[i]陣列表示第i個問題一開始在哪個人手中。 設二維陣列dp[i][j]表示第i個人做第j題時,前面1-j題總共要轉交幾次。 那麼 dp[0][i] = dp[0][i - 1] + (problem[i] != 0); dp[1][i] = min(dp[0][i-1], dp[1][i-1]) + (problem[i] != 1); dp[2][i] = min(dp[0][i-1], dp[1][i-1], dp[2][i-1]) + (problem[i] != 2);
View Code