一道动态规划的题目,首先存入每个向量的信息,注意题目中给出的是向量,而不是顶点。存入信息的同时要计算如果该向量的起点是放置在原点的位置,那么该向量与x轴所围成的面积的两倍,同时在录入完所有的向量信息之后,要将所有的向量按照斜率从大到小进行排序,也就是说,我们尽量先绘制斜率大的向量,这样能够保证后面所绘制的向量与x轴围成的面积也尽量大。同时要计算出所有的向量的y值之和也就是最大的高度。dp[i][j]表示当前已经选取了i个向量并且最终的高度为j时所围成的最大的面积。依次从第一个向量向后选取,同时假设当前需要选取的向量的个数为k,总的高度从最大高度向选取向量的高度递减,判断dp[k-1][j-point[i].y]是否存在,如果存在就进行尝试更新(添加相应的向量,同时判断加入向量之后和之前的k-1个向量围成的面积是否比dp[k][j]要大,如果更大就进行更新)。具体实现见如下代码:
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<deque>
us