結果
問題 |
No.409 ダイエット
|
ユーザー |
|
提出日時 | 2021-01-11 04:56:29 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 716 bytes |
コンパイル時間 | 750 ms |
コンパイル使用メモリ | 72,816 KB |
実行使用メモリ | 12,672 KB |
最終ジャッジ日時 | 2024-11-21 08:50:26 |
合計ジャッジ時間 | 5,964 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 57 WA * 35 |
コンパイルメッセージ
main.cpp:14:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type] 14 | main() | ^~~~
ソースコード
#include<iostream> #include<deque> using namespace std; int N; long A,B,W,D[3<<17]; long b[3<<17]; long dp[3<<17]; long f(int id,int x){return -id*B*x+b[id];} bool check(int i,int j,int k) { if(B==0)return true; return (__int128)(j-i)*(b[k]-b[j])<=(b[j]-b[i])*(__int128)(k-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++) { 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; }