記憶化搜尋 dfs Chocolate

2021-09-22 05:46:18 字數 1742 閱讀 5463

charlie 有一塊巧克力。

這塊巧克力是矩形的,有 n 行 m 列一共 n × m 個大小相同的小塊,每一小塊都有乙個美味值 ai,j。

charlie 有 k 個朋友,他希望把巧克力分給這些朋友。

charlie 按如下方法分配巧克力:做 k-1 次分割,每次拿出一塊巧克力,將它

沿水平或豎直方向分成兩塊矩形的巧克力。分割完成後一共有 k 塊巧克力,charlie

會把這 k 塊巧克力一一分給他的朋友們。

一塊巧克力的美味值定義為它的所有小塊的美味值之和。charlie 想知道是否

存在一種可行的方案,使每個朋友獲得的巧克力的美味值相等。

本題有多組測試資料。第一行乙個正整數 t 表示資料組數。

對於每組測試資料:

第一行 3 個正整數表示 n, m, k。

接下來 n 行,每行 m 個正整數,表示每一小塊的美味值

對於每個測試資料,輸出一行 yes 或 no,表示是否存在可行方案。

//記憶化搜尋

intmain()

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++

)for

(int k=i;k<=n;k++

)for

(int l=j;l<=m;l++

) f[i]

[j][k]

[l]=a[k]

[l]-a[i-1]

[l]-a[k]

[j-1

]+a[i-1]

[j-1];

//求出每一塊巧克力

ans=f[1]

[1][n]

[m]/k;

//求美味值

if(f[1]

[1][n]

[m]%k)

printf

("no\n");

//判斷能不能

elseif(

jyhdfs(1

,1,n,m)

)printf

("yes\n");

//dfs

else

printf

("no\n");

//否則輸出no

}return0;

}

記憶化搜尋

演算法上依然是搜尋的流程,但是搜尋到的一些解用 動態規劃 的那種思想和模式作一些儲存。一般說來,動態規劃總要遍歷所有的狀態,而搜尋可以排除一些無效狀態。更重要的是搜尋還可以剪枝,可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求...

記憶化搜尋

記憶化搜尋 演算法上依然是搜尋的流程,但是搜尋到的一些解用動態規劃的那種思想和模式作一些儲存。記憶化演算法在求解的時候還是按著自頂向下的順序,但是每求解乙個狀態,就將它的解儲存下來,以後再次遇到這個狀態的時候,就不必重新求解了。例1.題目描述 給從左至右排好隊的小朋友們分糖果,要求 1.每個小朋友都...

記憶化搜尋

原文 感謝作者。一.動態規劃 動態規劃 dynamic programming 與 分治思想 有些相似,都是利用將問題分 為子問題,並通過合併子問題的解來獲得整個問題的解。於 分治 的不同之處在 於,對於乙個相同的子問題動態規劃演算法不會計算第二次,其實現原理是將每乙個計算過的子問題的值儲存在乙個表...