hihocoder 1360 凸多边形
来源:互联网 发布:阿里云ecs绑定域名 编辑:程序博客网 时间:2024/06/06 11:44
暴力枚举凸多边形起点,dp[i][j][k]维护起点是i,终点是j,由k个点组成的凸多边形
转移方程:dp[i][j][p+1]=max(dp[i][j][p+1],dp[i][k][p]+s(i,k,j));
#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>using namespace std;#define maxn 205int n,m;int x[maxn],y[maxn];long long dp[maxn][maxn][maxn];int s(int i,int j,int k){ return x[i]*y[j]+x[j]*y[k]+x[k]*y[i]-x[i]*y[k]-x[j]*y[i]-x[k]*y[j];}int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); for(int i=0;i<n;i++) x[i+n]=x[i],y[i+n]=y[i]; memset(dp,-1,sizeof(dp)); for(int i=0;i<n;i++) dp[i][i][1]=0; long long ans=0; for(int i=0;i<n;i++) for(int j=i+1;j<i+n;j++) for(int p=0;p<m;p++) for(int k=i;k<j;k++) { if(dp[i][k][p]==-1) continue; dp[i][j][p+1]=max(dp[i][j][p+1],dp[i][k][p]+s(i,k,j)); if(p+1==m) ans=max(ans,dp[i][j][p+1]); } printf("%lld",ans/2); if(ans%2==1) printf(".50\n"); else printf(".00\n");}
0 0
- hihocoder 1360 凸多边形
- [HihoCoder]#1360 : 凸多边形
- 凸多边形
- hihocoder:
- hihoCoder
- Hihocoder
- hihocoder
- hihocoder
- hihocoder
- hihocoder
- hihocoder
- HihoCoder
- HihoCoder
- HihoCoder
- HihoCoder
- HihoCoder
- HihoCoder
- hihoCoder
- set
- hdu5832-ccpc网络赛 -高精度取余
- 华为OJ——统计大写字母个数
- git常用指令、流程和原理
- 大数据量下高并发同步的讲解
- hihocoder 1360 凸多边形
- JavaScript DOM
- UIButton实现左文字右图片
- python标准库概览
- django 实现简单的插入视频
- 华为OJ——字符串运用-密码截取
- codeforces#290 B&&510 B Fox And Two Dots (简单dfs)
- js创建对象
- 华为OJ——求最大连续bit数