Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<bits/stdc++.h>using namespace std;double f[105][105][105];int n, m;struct node{int x, y;}point[105];double solve(int i, int j){return sqrt((point[i].x-point[j].x) * (point[i].x-point[j].x) + (point[i].y-point[j].y) * (point[i].y-point[j].y));}double S(int a, int b, int c){double aa = solve(a, b), bb = solve(b, c), cc = solve(c, a);double p = aa + bb + cc;p /= 2;return sqrt(p*(p-aa)*(p-bb)*(p-cc));}int main(){double ans = 0;scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++i){scanf("%d%d", &point[i].x, &point[i].y);}for(int i = 1; i <= n; ++i){for(int j = 1; j <= n; ++j){for(int k = 3; k <= m; ++k){for(int l = 1; l <= n; ++l){if(!(l>i && l<j)) continue;f[i][j][k] = max(f[i][j][k], f[i][l][k-1] + S(i, l, j));}}}