Learning Vector UVA - 12589

这是一篇关于利用动态规划解决UVA 12589题目的博客。博主首先介绍了如何存储和计算向量信息,特别是考虑向量与x轴围成的两倍面积,并按斜率排序。接着,博主详细阐述了动态规划的状态转移方程,解释了如何选取斜率大的向量以最大化面积。最后,提供了具体的代码实现来辅助理解解题过程。
摘要由CSDN通过智能技术生成

一道动态规划的题目,首先存入每个向量的信息,注意题目中给出的是向量,而不是顶点。存入信息的同时要计算如果该向量的起点是放置在原点的位置,那么该向量与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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值