結果
| 問題 |
No.409 ダイエット
|
| コンテスト | |
| ユーザー |
monnu
|
| 提出日時 | 2021-02-20 02:11:32 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,548 bytes |
| コンパイル時間 | 1,767 ms |
| コンパイル使用メモリ | 175,480 KB |
| 実行使用メモリ | 7,808 KB |
| 最終ジャッジ日時 | 2024-09-17 05:22:28 |
| 合計ジャッジ時間 | 7,782 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 83 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
//#include <atcoder/all>
//using namespace atcoder;
using ll=long long;
using Graph=vector<vector<int>>;
#define MOD 1000000007
#define INF 1000000000000000000
#define MAX 1000000
//傾きが単調減少、xが単調増加
template<class T>
class CHT{
struct Line{
T a,b;
Line(ll a_,ll b_):a(a_),b(b_){}
Line():a(0),b(0){}
T get(T x){
return a*x+b;
}
};
private:
deque<Line> deq;
bool check(Line &l1,Line &l2,Line &l3) const{
return (l2.a-l1.a)*(l3.b-l2.b)<(l2.b-l1.b)*(l3.a-l2.a);
}
public:
CHT(){}
void insert(T a,T b){
Line l3(a,b);
while(deq.size()>=2){
Line l2=*deq.rbegin();
Line l1=*(deq.rbegin()-1);
if(check(l1,l2,l3)){
break;
}
deq.pop_back();
}
deq.push_back(l3);
}
T get(T x){
while(deq.size()>=2){
Line l1=*begin(deq);
Line l2=*(begin(deq)+1);
if(l1.get(x)<l2.get(x)){
break;
}
deq.pop_front();
}
Line l=*begin(deq);
return l.get(x);
}
};
int main(){
ll N;
ll A,B,W;
cin>>N>>A>>B>>W;
vector<ll> D(N);
for(int i=0;i<N;i++){
cin>>D[i];
}
vector<ll> dp(N+1,INF);
dp[0]=W;
CHT<ll> cht;
cht.insert(0,dp[0]);
for(ll i=0;i<N;i++){
dp[i+1]=-(i+1)*A+(i+1)*i*B/2+cht.get(i+1)+D[i]+A;
cht.insert(-(i+1)*B,(i+2)*(i+1)*B/2+(i+1)*A+dp[i+1]+D[i]);
}
ll ans=INF;
for(ll i=0;i<=N;i++){
//cout<<dp[i]<<" ";
ans=min<ll>(ans,dp[i]+(N-i)*(N-i+1)*B/2-(N-i)*A);
}
//cout<<endl;
cout<<ans<<endl;
}
monnu