终于找到一点自信,没有看别人题解ac这道lrj紫书上的题目,一旦想到用海伦公式其他的就很简单了,我发现用递归写dp,真的比循环写dp要容易些。主要思路就是dfs函数中的循环语句。其实这道题目也可以看做搜索类的题目,状态转移方程式是dp[i][j][n]表示在i,j点中取n个节点的最大面积(i,j必取),dp[i][j][n] = max(dp[k][j][n-1]+area[i][k][j]) 其中i+1<= k <= j-1.就是这样简单的思路,有点想石子合并中一些思路。
题目链接:https://vjudge.net/problem/UVA-1543
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double pi = 3.14159265358979323846;
const int maxn = 60;
int n , m;
double point[maxn];
double area[maxn][maxn][maxn];
double dp[maxn][maxn][maxn];
double getangle (int i , int j) {
double tmp = abs(point[i]-point[j]);
return tmp > 0.5 ? 1-tmp : tmp;
}
double g