給定乙個n×mn×m的網格,每個格仔上寫有0或1。現在用一些長方形覆蓋其中寫有1的格仔,長方形的每條邊都要與座標軸平行。要求:每個寫著1的格仔都要被覆蓋,長方形不可以重疊(重複繪製也多少會增加效能開銷),也不能覆蓋到任何乙個寫著0的格仔(不然繪製結果就不正確了)。請問最少需要多少長方形?
輸入檔案第一行兩個正整數n,mn,m,表示網格大小為nn行mm列。
接下來的nn行,每行mm個正整數aijaij(保證均為0或1),其中第ii行jj列的正整數表示網格ii行jj列裡填的數。
輸出檔案包含一行乙個正整數,表示最少需要的長方形數量。
4 4
1 1 1 0
1 1 1 1
0 0 1 1
0 0 1 1
3
樣例解釋
一種行的覆蓋方案(粗線表示分割線):
資料範圍
對於30% 的資料:n,m≤5n,m≤5。
對於100% 的資料:n≤100,m≤8n≤100,m≤8。
solution
狀壓dp,我想不到
令f[i][s]表示前i行,狀態為s
狀態為1表示是乙個新的開始
比如狀態10010
表示劃成了2個矩形,開頭在1 4
轉移時列舉是否能接起來
#include#include#include#include#include#include#define inf 1e9
using namespace std;
int n,m,s[105][10],f[102][1<<9];
int num=0;
bool pd(int k,int s)
}for(int i=0;i<=n;i++)
for(int j=0;j
f[0][0]=0;
for(int i=1;i<=n;i++)}}
}}
int ans=inf;
for(int s=0;s
cout<
return 0;
}
鄰面合併(merging)
給定乙個n mn m的網格,每個格仔上寫有0或1。現在用一些長方形覆蓋其中寫有1的格仔,長方形的每條邊都要與座標軸平行。要求 每個寫著1的格仔都要被覆蓋,長方形不可以重疊 重複繪製也多少會增加效能開銷 也不能覆蓋到任何乙個寫著0的格仔 不然繪製結果就不正確了 請問最少需要多少長方形?輸入檔案第一行兩...
離開分支合併的merging狀態
今天遇到乙個git合併的問題,git分支合併,原本只是想看看這兩個分支 具體有什麼區別的,結果merge了之後,發現 其實不需要合併,然後我本地的 分支就直接處於這個merging合併中的狀態了,想要pull 都不能pull,在網上查了一下git命令列,使用了下面這行命令,相當於回滾到你合併之前的一...
Arcengine合併面要素
問題 對兩個進行合併的過程中 比如面a和麵b 發現無論怎麼合併最後的結果總是a要素的區域。解決方法 使用itopologicaloperator.union 方法對a b倆個面要素進行合併,後來發現是沒有獲取union操作的結果 當時的錯誤 是這樣的 itopologicaloperator2 un...