Submission #1307408

#TimeUsernameProblemLanguageResultExecution timeMemory
1307408HoriaHaivasDischarging (NOI20_discharging)C++20
9 / 100
2 ms1032 KiB
#include<bits/stdc++.h> #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " #pragma GCC optimize("Ofast") #define int long long using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int range_rng(int l, int r) { return uniform_int_distribution<int>(l,r)(rng); } pair<int,int> dp[2005]; int v[2005]; const int inf=1e18; signed main() { /* ifstream fin("arbore.in"); ofstream fout("arbore.out"); */ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,i,j,mx; cin >> n; for (i=1;i<=n;i++) { cin >> v[i]; dp[i].first=inf; dp[i].second=inf; } dp[0].first=0; dp[0].second=0; for (i=1;i<=n;i++) { mx=-1; for (j=i;j>=1;j--) { mx=max(mx,v[j]); if (dp[j-1].second+(dp[j-1].first+mx)*(i-j+1)<=dp[i].second) { if (dp[j-1].second+(dp[j-1].first+mx)*(i-j+1)<dp[i].second) { dp[i].second=dp[j-1].second+(dp[j-1].first+mx)*(i-j+1); dp[i].first=dp[j-1].first+mx; } else dp[i].first=min(dp[i].first,dp[j-1].first+mx); } } } cout << dp[n].second; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...