HDU 4001 To Miss Our Children Time(DP LIS)
4949 단어 dp
사고방식: DP와 유사한 LIS는 높이만 구할 수 있다. 데이터를 입력한 후에 정렬에 주의하고 구조체의 모든 구성원이 정렬해야 한다. 데이터가 조건에 부합되지 않을 때 dp[]가 정확하게 초기화하면 적지 않은 역할을 한다. 그 다음에 폭력적인 DP가 가장 큰 역할을 한다.
#include<map>
#include<queue>
#include<cmath>
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
#include<algorithm>
#define LL __int64
#define inf 0x3f3f3f3f
const double PI=acos(-1.0);
using namespace std;
LL dp[1010];
struct node{
LL l,w,h,d;
}q[1010];
LL op(node a,node b){
if(a.l!=b.l)
return a.l<b.l;
if(a.w!=b.w)
return a.w<b.w;
if(a.h!=b.h)
return a.h<b.h;
if(a.d!=b.d)
return a.d>b.d;
}
int main(){
LL n,m,i,j,k,l,w,h;
while(~scanf("%I64d",&n)&&n){
memset(dp,0,sizeof(dp));
for(i=0;i<n;++i){
scanf("%I64d%I64d%I64d%I64d",&q[i].l,&q[i].w,&q[i].h,&q[i].d);
if(q[i].w>q[i].l){
swap(q[i].w,q[i].l);
}
}
sort(q,q+n,op);
LL ans=0;
for(i=0;i<n;++i){
dp[i]=q[i].h;
for(j=0;j<i;++j){
LL now=q[i].l*q[i].w;
LL pre=q[j].l*q[j].w;
LL nl=q[i].l,nw=q[i].w;
LL pl=q[j].l,pw=q[j].w;
if( (nl>pl&&nw>pw)&&q[i].d==2&&(dp[i]<(dp[j]+q[i].h) ) ){
dp[i]=dp[j]+q[i].h;
}
if((nl>=pl)&&(nw>=pw)&&q[i].d==0&&( dp[i]<(dp[j]+q[i].h) ) ){
dp[i]=dp[j]+q[i].h;
}
if( (nl>=pl)&&(nw>=pw)&&(now>pre)&&q[i].d==1&&(dp[i]<(dp[j]+q[i].h) ) )
dp[i]=dp[j]+q[i].h;
}
if(ans<dp[i])
ans=dp[i];
}
printf("%I64d
",ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.