题目链接

题意:



题解:
















AC代码

/*
    Author:zzugzx
    Lang:C++
    Blog:blog.csdn.net/qq_43756519
*/
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
#define SZ(x) (int)x.size()
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int mod=1e9+7;
//const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=1e6+10;
const ll inf=0x3f3f3f3f;
const int dir[][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};

struct node{
    double x,y;
}p[110];
int n;
double dp[110][110];
double calc(node a,node b,node c){
    return fabs((a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y))/2;
}
bool ok(int a,int b,int c){
    double s=calc(p[a],p[b],p[c]);
    for(int i=1;i<=n;i++){
        if(i==a||i==b||i==c)continue;
        double t=calc(p[i],p[a],p[b])+calc(p[i],p[a],p[c])+calc(p[i],p[b],p[c]);
        if(fabs(s-t)<=eps)return 0;
    }
    return 1;
}
int main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++){
            scanf("%lf%lf",&p[i].x,&p[i].y);
            if(i>=3)dp[i-2][i]=calc(p[i-2],p[i-1],p[i]);
        }
        for(int len=4;len<=n;len++)
            for(int i=1,j=i+len-1;j<=n;i++,j++){
                dp[i][j]=inf;
                for(int k=i+1;k<j;k++)
                    if(ok(i,j,k))
                        dp[i][j]=min(dp[i][j],max(calc(p[i],p[j],p[k]),max(dp[i][k],dp[k][j])));
            }
        printf("%.1f\n",dp[1][n]);
    }
    return 0;
}