CCF CSP201809 4再賣菜(記憶化搜尋)

2021-09-18 08:11:32 字數 1558 閱讀 5444

本文參考 迷你之忍 的文章:ccf再賣菜

試題編號:201809-4

試題名稱:再賣菜

時間限制:1.0s

記憶體限制:256.0mb

問題描述:

在一條街上有n個賣菜的商店,按1至n的順序排成一排,這些商店都賣一種蔬菜。

第一天,每個商店都自己定了乙個正整數的**。店主們希望自己的菜價和其他商店的一致,第二天,每一家商店都會根據他自己和相鄰商店的**調整自己的**。具體的,每家商店都會將第二天的菜價設定為自己和相鄰商店第一天菜價的平均值(用去尾法取整)。

注意,編號為1的商店只有乙個相鄰的商店2,編號為n的商店只有乙個相鄰的商店n-1,其他編號為i的商店有兩個相鄰的商店i-1和i+1。

給定第二天各個商店的菜價,可能存在不同的符合要求的第一天的菜價,請找到符合要求的第一天菜價中字典序最小的一種。

字典序大小的定義:對於兩個不同的**序列(a1, a2, …, an)和(b1, b2, b3, …, bn),若存在i (i>=1), 使得ai樣例輸出

2 2 2 1 6 5 16 10
資料規模和約定

對於30%的評測用例,2<=n<=5,第二天每個商店的菜價為不超過10的正整數;

對於60%的評測用例,2<=n<=20,第二天每個商店的菜價為不超過100的正整數;

對於所有評測用例,2<=n<=300,第二天每個商店的菜價為不超過100的正整數。

請注意,以上都是給的第二天菜價的範圍,第一天菜價可能會超過此範圍。

題意:有n個數,可以得到每個數與其相鄰數的平均值,現在給定這n個數的平均值,要求計算出這n個數的最小字典序排列。

分析:因為每個平均值都與2——3個數有關,題目要求給出這n個數的最小字典數排列,所以我們從字典序最小的情況開始遍歷,如果符合要求則輸出,推論如下:

∵ b[n-1]+b[n]+b[n+1]=3a[n]+i (0<=i<=2)

∴ b[n+1]=3a[n]-b[n]-b[n-1]+i (0<=i<=2)(普通)

∴ b[1]=2a[2]-b[2]+u (0<=u<=1)(首)

∴ b[t]=2a[2]-b[n-1]+u (0<=u<=1)(尾)

以上為遞推式,**如下:

#includeusing namespace std;

int t,a[400],b[400];//輸入菜價,所求菜價

bool f[301][301][301]; //儲存狀態資訊,也就是dfs的n,x,y

void dfs(int n,int x,int y)//分別是搜到第n天,b[n-1](求到了第n-1天的菜價),b[n](求到了第n天的菜價)

}int main()

return 0;

}

CCF CSP題目 再賣菜

一 差分約束系統是啥?差分約束系統 system of difference constraints 是求解關於一組變數的特殊不等式組之方法。如果乙個系統由n個變數和m個約束條件組成,其中每個約束條件形如xj xi bk i,j 1,n k 1,m 則稱其為差分約束系統 system of diff...

ccf 201809 4 再賣菜 70分暴力

思路是深搜,然後根據他給的 約束可以取的值減小一點複雜度,最後選夠了之後計算並與答案相比較,由於是從一開始搜的,那麼答案一定是字典序最小的,考試的時候打了個這個才30分,現在變成了70分,鬱悶啊.加上這四十分我就差十分就會程式設計了.話說這次第三題沒寫,第四題可能是敲錯了?第五題暴力20分.簡直就是...

CCF 201809 4 試題名稱 再賣菜

參考部落格 201809 4 再賣菜 ccf 剪枝優化 題目就不貼了。題目要求 給出商店的第二天的菜價,第二天的菜價是第一天臨近商店的 的平均值 求平均時使用去尾法求整 要求找到符合要求的第一天菜價中字典序最小的一種。下面分別使用a,b a,ba,b表示第一天,第二天的菜價,由題意可得,菜價應滿足下...