已知n<100n个点取k<nk 个,求这k个点构成凸包的最大面积。

先求出凸包,枚举凸包上第一个点(只要枚举前⌈n/k⌉\lceil n/k \rceil 个点).

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<functional>
#include<vector>
using namespace std;
typedef long long ll;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MAXN (200+10)
#define cross(p1,p2,p3) ((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y))
#define crossOp(p1,p2,p3) sign(cross(p1,p2,p3))
#define EPS 0
#define pb push_back
inline int sign(double a) {return a<-EPS?-1:a>EPS;
}
struct P
{ll x,y;P(){}P(ll _x,ll _y):x(_x),y(_y){}friend ostream& operator<<(ostream& cout,P &a){cout<<"("<<a.x<<','<<a.y<<')'<<endl;return cout;}friend bool operator< (P a,P b) {return a.x<b.x|| (a.x == b.x && a.y<b.y);  }
}a[MAXN],p[MAXN];
typedef P Point;
ll S(P A,P B,P C)
{return (A.x-C.x)*(B.y-C.y)-(A.y-C.y)*(B.x-C.x)  ;
}vector<Point> qs,ps;
vector<Point> convexHull() {int n = ps.size();if (n<=1)return ps;sort(ps.begin(),ps.end());for (int i=0;i<n;qs.push_back(ps[i++])) {while (qs.size()>1 && crossOp(qs[qs.size()-2],qs.back(),ps[i]) <= 0)qs.pop_back();}for (int i=n-2,t=qs.size();i>=0;qs.push_back(ps[i--])) {while ((int)qs.size()>t && crossOp(qs[(int)qs.size()-2],qs.back(),ps[i]) <=0 )qs.pop_back();}qs.pop_back();return qs;
}
int n,st[MAXN];
ll f[MAXN][MAXN]={0};
int main()
{int T;cin>>T;For(kcase,T) {int k;scanf("%d%d",&n,&k);For(i,n) scanf("%lld%lld",&a[i].x,&a[i].y); //scanf读入失败返回-1 ps.clear(); qs.clear();For(i,n) ps.pb(P(a[i].x,a[i].y));convexHull();int siz=qs.size();ll ans=0;For(i,siz) p[ i + siz ]=p[i] = qs[i-1];if (k>siz) {ll ans=0;For(i,siz) ans+=S(p[i],p[i+1],p[1]);printf("Case #%d: %lld\n",kcase,ans);continue;}For(t,n/k+(bool)(n%k)) {Fork(i,t,siz+t) {Fork(j,3,k+1){f[i][j]=-1;Fork(l,t+1,i-1) { f[i][j]=max(f[i][j],f[l][j-1]+S(p[l],p[i],p[t]));}}   }ans=max(ans,f[siz+t][k+1]);}printf("Case #%d: %lld\n",kcase,ans);}return 0;
}

HDU 5473(There was a kingdom-凸包+dp)相关推荐

  1. HDU 5473 There was a kingdom 凸包 DP

    题意: 给出平面上n个点的坐标,选k个点,使得这k个点围起来的面积最大. 分析: 参考了 叉姐的分析 和 不慌不忙菊苣的代码 思路我都懂,但是DP的部分还是不太会写. 我体会了一下其中含义,也许这样可 ...

  2. hdu 5473 There was a kingdom(dp+几何)

    题目链接:hdu 5473 There was a kingdom 解题思路 选取的点一定在凸包上,所以对点集做凸包,如果凸包的点个数小于等于K,面积可以取到最大值.否则,枚举起点,做动态规划.dp[ ...

  3. Codeforces 835 F Roads in the Kingdom(树形dp)

    F. Roads in the Kingdom(树形dp) 题意: 给一张n个点n条边的无向带权图 定义不便利度为所有点对最短距离中的最大值 求出删一条边之后,保证图还连通时不便利度的最小值 $n & ...

  4. hdu 4799 LIKE vs CANDLE(树形dp)

    题目链接:hdu 4799 LIKE vs CANDLE 解题思路 dp[i][0]表示第i个节点不翻转的最优解,dp[i][1]表示翻转的最优解,每个位置翻转的代价到其父亲节点的位置再计算. 代码 ...

  5. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. HDU - 4856 Tunnels (预处理+状压dp)

    HDU - 4856 Tunnels (预处理+状压dp) [hud链接] [vj链接] 题目 Problem Description Bob is travelling in Xi'an. He f ...

  7. HDU 1025 Constructing Roads In JGShining's Kingdom(DP+二分)

    点我看题目 题意 :两条平行线上分别有两种城市的生存,一条线上是贫穷城市,他们每一座城市都刚好只缺乏一种物资,而另一条线上是富有城市,他们每一座城市刚好只富有一种物资,所以要从富有城市出口到贫穷城市, ...

  8. 【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)

    题干: Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  9. hdu 1025 Constructing Roads In JGShining's Kingdom(DP + 二分)

    此博客为转发 Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

最新文章

  1. 从陈坤微信号说起:微信公众平台开发者的江湖
  2. linux 定时任务 crontab 报错 service command not found 解决方法
  3. c与c十十与python_浅要分析Python程序与C程序的结合使用
  4. python全栈开发 * 14 知识点汇总 * 180530
  5. JZOJ 1598. 文件修复
  6. Boost:原子API的用法测试程序
  7. 简述tcp协议三报文握手过程_华为原理 | 传输层协议amp;交换转发原理
  8. 设计模式入门(策略模式)
  9. Web框架——Flask系列之宏、继承、包含(十八)
  10. windows Tracert命令
  11. Android如何获取Wifi名称即SSID
  12. 澳大利亚计算机领域的科学家,澳科学家首创硅基元件 突破量子计算机制造瓶颈...
  13. web表格在css中属性,CSS属性之表格(Table)_html/css_WEB-ITnose
  14. k阶原点距和k阶中心距各是说明什么数字特征
  15. Java进阶:Mybatis学习
  16. linux中配置Java环境
  17. 西电计算机网络ppt,《西安电子科技大学》PPT课件
  18. 用计算机作一首歌,我想用电脑创作一首歌。需要什么软件啊?
  19. 大量图片数据导出为excel导致内存溢出解决方案落地
  20. CSS布局:多种方案实现固定页脚(sticky footer)

热门文章

  1. html使用手机修改密码,moshujiacn手机设置修改密码步骤
  2. mysql数据库修改密码
  3. rabbitmq 修改密码
  4. 联想Thinkpad E420 重装系统
  5. python 频数表_python里计算每个数字出现的频数
  6. POX控制器的分析(二)
  7. Java--UML类图--使用/详解
  8. 爬虫练习-荔枝直播(分享页)
  9. 解决photoshop菜单卡顿,闪动,停顿问题
  10. BRISK特征提取算法 .