王7的生日到了,他的弟弟準備送他巧克力。表示很水的乙個題.要不是資料有問題我就切了有乙個被分成n*m格的巧克力盒,在(i,j)的位置上有a[i,j]塊巧克力。就在送出它的前一天晚上,有老鼠夜襲巧克力盒,某些位置上被洗劫並且穿了洞。所以,你——王7的弟弟王9,必須從這個滿目蒼夷的盒子中切割出乙個矩形巧克力盒,其中不能有被老鼠洗劫過的格仔且使這個盒子裡的巧克力盡量多。
第一行有兩個整數 n、m。第 i+1行的第 j 個數表示a[ i , j ]。如果這個數為 0 ,則表示這個位置的格仔被洗劫過。
輸出最大巧克力數。
懸線法+二維字首和。吼啊
不過貌似比只寫二維字首和的麻煩一點.
我們預處理出來懸線法用的陣列.(記得變一下限制條件.
然後真正做懸線法的時候.
我們可以得到乙個合法矩形.
其左上角座標,右下角座標均可求.
然後用二維字首和算一下即可.
ps:這題資料有問題,讀入矩陣的時候要用\(cin\)
**
#include#include#include#define r register
#define n 308
using namespace std;
inline void in(int &x)
while(isdigit(s))
x*=f;
}int n,m,ans;
int res[n][n],sum[n][n];
int ri[n][n],le[n][n],up[n][n];
inline int calc(int a,int b,int c,int d)
int main()
for(r int i=1;i<=n;i++)
for(r int j=2;j<=m;j++)
if(res[i][j] and res[i][j-1])
le[i][j]=le[i][j-1];
for(r int i=1;i<=n;i++)
for(r int j=m-1;j>=1;j--)
if(res[i][j] and res[i][j+1])
ri[i][j]=ri[i][j+1];
for(r int i=1;i<=n;i++)
for(r int j=1;j<=m;j++)
int a=i-up[i][j]+1,b=le[i][j],c=i,d=ri[i][j];
ans=max(ans,calc(a,b,c,d));
} printf("%d",ans);
}
P1578 奶牛浴場 懸線法 dp
原題 題解 給一些障礙物,求最大矩形的面積,不能覆蓋障礙物。懸線概念 有效豎線 除了兩個端點外,不覆蓋任何障礙點的豎直線段。懸線 上端點覆蓋了乙個障礙點或達到整個矩形上端的有效豎線。每個懸線都與它底部的點一 一對應。每個懸線可以向左右擴充套件就會得到乙個矩形。最大矩形一定在這些矩形中。設 h i j...
二維字首和
時間限制 1 sec 記憶體限制 128 mb 提交 155 解決 51 提交 狀態 討論版 命題人 admin 題目描述 一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 10000 個目標,用整數xi,yi 0 xi,yi 5000 表示目標在地圖上的位置,每個...
二維字首和
1 二維字首和 模板 二維字首和 模板題 acwing 796.子矩陣的和 s i,j 第i行j列格仔左上部分所有元素的和 1.以 x1,y1 為左上角,x2,y2 為右下角的子矩陣的和為 s x2 y2 s x1 1 y2 s x2 y1 1 s x1 1 y1 1 s x y s x y 1 s...