#4719. 내부 볼륨
제목 설명
알려진 평면에서 n n n 개의 점, 점 세트 S S S 는 내부 볼록 패킷이며 다음 경우에만 해당됩니다.
4
4
내철포로 구성된 볼록 다각형의 면적을 최대화해 보세요.
문제풀이
먼저 우리는 매거점 O O O를 볼록 가방의 가장 아래 점으로 고려한 다음에 그 위의 점을 꺼내 극각에 따라 정렬한다.우리는 극각 순서에 따라 점을 얻었기 때문에 우리는 dp\text{dp}dp: dp: f[i] [j] [j] f[i] [j] [i] [j]가 돌포의 마지막 점은 ii이고 그 다음은 jjj의 최대 면적을 설계할 수 있다. 우리는 이동식을 얻을 수 있다. f[i] [j] [j] [j] [j] = m a x [f] [j] [f[j] [j] [k] [k] [k] + [k] + [k] + S] + S(O, i, i, i) f[i] [i] [i] [i] [i] [i] [i] [j] [j] [j] [j] [j] [j] [j] [j] [j] [j] [j] [j] [j] (O, i, j)}, 여기서 k < j kk
코드
#include
using namespace std;
int T,n,m,s,f[55][55],c[55];
struct O{int x,y;}b[55],a[55];
O operator -(O A,O B){
return (O){A.x-B.x,A.y-B.y};
}
int operator *(O A,O B){
return A.x*B.y-A.y*B.x;
}
int S(O A){
return A.x*A.x+A.y*A.y;
}
bool cmp(O A,O B){
return A*B<0 || (A*B==0 && S(A)<S(B));
}
void W(){
memset(f,0,sizeof f);
sort(a+1,a+m+1,cmp);
for (int j,k,t,v,i=2;i<=m;i++){
j=i-1;t=0;
while(j && a[j]*a[i]==0) j--;
while(j){
c[++t]=j;k=j-1;v=a[i]*a[j];
while(k && (a[k]-a[j])*(a[i]-a[j])<0) k--;
if (k) v+=f[j][k];
f[i][j]=v;s=max(v,s);j=k;
}
for (int u=t-1;u>0;u--)
f[i][c[u]]=max(f[i][c[u]],f[i][c[u+1]]);
}
}
void work(){
scanf("%d",&n);s=0;
for (int i=1;i<=n;i++)
scanf("%d%d",&b[i].x,&b[i].y);
for (int i=1;i<=n;i++){
m=0;
for (int j=1;j<=n;j++){
if (b[j].y>b[i].y || (b[j].y==b[i].y && b[j].x>b[i].x))
a[++m]=b[j]-b[i];
}
W();
}
printf("%.1lf
",1.*s/2);
}
int main(){for (cin>>T;T--;work());return 0;}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.