完美正方形 藍橋真題

2021-09-18 03:39:22 字數 986 閱讀 2440

題目略

搜尋剪枝 每次從左上角開始一行行找 找第乙個空白位置 看能不能放下某個正方形 當產生完全覆蓋之後即找到答案 類似方法的題還有zoj 3209

兩點注意

1 先對19個正方形公升序排序 只要某個沒用過得正方形放不下了 後邊的肯定放不下直接跳過(如果是矩形就沒法這樣貪心) 

2 如果初始標定的三個正方形放在了左上角 找第乙個空白位置就從左上開始 如果放在了右下角 那就從右下開始 不然在很長一段時間內搜尋是基本沒啥剪枝的 因為周圍太空曠了 應該是直到與標定的三個正方形相遇之後剪枝才開始強力的

#include using namespace std;

const int maxn=200;

int book[maxn][maxn];

int ary[maxn],flag[maxn];

int num,gou;

void paint(int x,int y,int len,int val)

}}bool judge(int x,int y,int len)

}return 1;

}bool dfs(int area)

*/if(area==23716) return 1;

for(i=1;i<=154;i++)

}if(j!=155) break;

}for(i=0;i}

else break;

}return 0;

}int main()

memset(book,-1,sizeof(book));

//47 46 61

paint(1,1,47,19);

paint(1,47+1,46,20);

paint(1,47+46+1,61,21);

if(dfs(8046))

}printf("\n");

}else printf("gg\n");

return 0;

}

藍橋杯2015決賽 完美正方形 (dfs)

說實話,看了半天也沒看出來這是讓幹什麼的,上網一搜,才知道是dfs,完全沒看出來?哎,真是菜的摳腳啊。還是應該多多刷題。把每個正方形對應區域都設為該正方形的邊長 bool solve 判斷154 154這個區域是否都已經填滿滿,即用到了所有邊長的正方形。return1 bool judge int ...

191208題(最大正方形)

思路 動態規劃問題 1.設二維陣列dp m n 其中dp i j 表示以座標 i,j 為正方形右下角元素時的最大正方形的邊長。2.當前點的最大正方形邊長為上,左,左上三個點最大正方形邊長的最小值 1,也就是從這個點往這三個方向進行延伸,延伸的長度為上,左,左上三個點最大正方形邊長的最小值 1。即核心...

正方形等分計數總正方形數

如下圖正方形,邊長是1cm,每邊被四等分,求一共分出了多少個正方形。經過手工數 邊長為1 4的正方形 16 邊長為1 2的正方形 9 邊長為3 4的正方形 4 邊長為1的正方形 1 所以一共是 30個正方形。當上述的正方形,邊長被3等分的情況又如何 還是手動數 邊長為1 3的正方形 9 邊長為2 3...