您的位置:首页 > 其它

HDU1937 Finding Seats(dp求最小矩形)

2015-09-05 10:37 316 查看
题目描述:告诉你人数,求最小能容纳它们的矩形的面积

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <ctype.h>
using namespace std;
int dp[302][302];
int test(int i,int j,int k,int l)
{
return dp[i][j]-dp[i][l-1]-dp[k-1][j]+dp[k-1][l-1];
}
int main()
{
int x,y,z;
while(scanf("%d%d%d",&x,&y,&z),x)
{
int mmin=x*y;
for(int i=1; getchar(),i<=x; i++)
for(int j=1; j<=y; j++)
dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+(getchar()=='.');
for(int i=1; i<=x; i++)
if(dp[i][y]>=z)
for(int j=y; dp[i][j]>=z; j--)
for(int k=1; k<=x&&test(i,j,k,1)>=z; k++)
for(int l=j-mmin/(i-k+1)+1>0?j-mmin/(i-k+1)+1:0; l<=j; l++)
if(test(i,j,k,l)>=z)
mmin=(i-k+1)*(j-l+1)<mmin?(i-k+1)*(j-l+1):mmin;
else break;
printf("%d\n",mmin);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: