http://hihocoder.com/problemset/problem/1042?sid=1218064
http://www.cnblogs.com/boring09/p/4368198.html参考此神犇的博客
可以看出,包涵水塘0个顶定点时一定可以;
包涵水塘1个顶点时可以保持周长不变绕着走;
包涵2个顶点时需加长周长,肯定更劣,不必考虑;
包涵4个顶点时肯定可以;
把水塘统一转换到右下角,就可以直接从左上角开始画框,然后暴力枚举面积,判断即可。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,L,l,r,t,b,l1,r1,t1,b1,ans;
int main()
{
scanf("%d%d%d",&n,&m,&L);
scanf("%d%d%d%d",&l,&r,&t,&b);
//转换到右下角
if(l+r<=m&&t+b<=n)
{
l1=m-r;
r1=m-l;
t1=n-b;
b1=n-t;
}
else if(l+r<=m&&t+b>n)
{
l1=m-r;
r1=m-l;
t1=t;
b1=b;
}
else if(l+r>m&&t+b<=n)
{
l1=l;
r1=r;
t1=n-b;
b1=n-t;
}
for(int i=0;i<=L/2&&i<=n;i++)
{
for(int j=0;j<=L/2&&j<=m&&i+j<=L/2;j++)
{
if(i<=t1||j<=l1)
ans=max(ans,i*j);
if(i>t1&&j>l1&&i<=b1&&j<=r1)
ans=max(ans,i*j-(i-t1)*(j-l1));
if(i>b1&&j>r1)
ans=max(ans,i*j-(b1-t1)*(r1-l1));
}
}
printf("%d",ans);
return 0;
}