3156: 방어 준비
공식은 아무렇게나 밀어주면 돼요. DP를 거꾸로 하면 유일하게 아버지를 괴롭히는 것은 f가 2차원을 열어야 해요. 현재 점을 찍거나 놓지 않으면 탑을 앞에서 놓을 수 있다는 뜻이에요. (뒤에?)탑을 놓은 상태가 옮겨오다.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1000010;
const int inf=1e9;
inline int read(){
int x=0;char ch;
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}
typedef long long ll;
ll f[N][2]; //0 1
int q[N],head,tail,n,A[N];
double slop(int j,int k){
return (double)(f[j][1]-f[k][1])/(j-k)+(double)(k+j+1)/2;
}
int main(){
n=read();
for(int i=1;i<=n;i++)A[i]=read();
head=1;tail=1;
q[head]=n;f[n][1]=A[n];f[n][0]=inf;
for(int i=n-1;i>=1;i--){
while(head<tail&&slop(q[head+1],q[head])>i)head++;
int t=q[head];
f[i][0]=f[t][1]+(ll)(t-i)*(t-i+1)/2;
f[i][1]=min(f[i+1][1],f[i+1][0])+A[i];
while(head<tail&&slop(q[tail-1],q[tail])<slop(q[tail],i))tail--;
q[++tail]=i;
}
printf("%lld",min(f[1][0],f[1][1]));
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.