結果
| 問題 |
No.409 ダイエット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-01-11 04:52:11 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 708 bytes |
| コンパイル時間 | 742 ms |
| コンパイル使用メモリ | 72,576 KB |
| 実行使用メモリ | 12,544 KB |
| 最終ジャッジ日時 | 2024-11-21 08:50:19 |
| 合計ジャッジ時間 | 6,582 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 57 WA * 35 |
コンパイルメッセージ
main.cpp:13:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
13 | main()
| ^~~~
ソースコード
#include<iostream>
#include<deque>
using namespace std;
int N;
long A,B,W,D[3<<17];
long a[3<<17],b[3<<17];
long dp[3<<17];
long f(int id,int x){return a[id]*x+b[id];}
bool check(int i,int j,int k)
{
return (a[j]-a[i])*(b[k]-b[j])>=(b[j]-b[i])*(a[k]-a[j]);
}
main()
{
cin>>N>>A>>B>>W;
for(int i=0;i<N;i++)cin>>D[i];
dp[0]=W;
deque<int>P;
long ans=9e18;
for(int i=0;i<N;i++)
{
a[i]=-B*i;
b[i]=dp[i]+A*i+i*(i+1)/2*B;
while(P.size()>=2&&check(P[P.size()-2],P.back(),i))P.pop_back();
P.push_back(i);
while(P.size()>=2&&f(P[1],i+1)<=f(P[0],i+1))P.pop_front();
dp[i+1]=f(P[0],i+1)+D[i]-A*i+i*(i+1)/2*B;
}
for(int i=0;i<=N;i++)ans=min(ans,dp[i]-A*(N-i)+(N-i)*(N-i+1)/2*B);
cout<<ans<<endl;
}