結果
問題 | No.484 収穫 |
ユーザー |
![]() |
提出日時 | 2017-02-10 23:46:36 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,121 ms / 3,000 ms |
コード長 | 1,052 bytes |
コンパイル時間 | 1,360 ms |
コンパイル使用メモリ | 168,740 KB |
実行使用メモリ | 26,368 KB |
最終ジャッジ日時 | 2024-07-08 05:47:49 |
合計ジャッジ時間 | 9,565 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef long long ll;int n;int dp[2000][2000][2];ll a[2000],t[2000];int dfs(int l,int r,int k){if (dp[l][r][k] != -1) return dp[l][r][k];if (k == 0){int x = dfs(l + 1, r, 0) + 1;int y = dfs(l + 1, r, 1) + r - l;dp[l][r][k]=min(x,y);if (t[l] < dp[l][r][k]) dp[l][r][k] = 1000000000;}else{int x = dfs(l, r-1, 1) + 1;int y = dfs(l, r-1, 0) + r - l;dp[l][r][k]=min(x,y);if (t[r] < dp[l][r][k]) dp[l][r][k] = 1000000000;}return dp[l][r][k];}int f(ll x){for(int i=0;i<n;i++){t[i]=x-a[i];if(t[i]<0)return 0;}for(int i=0;i<n;i++)for(int j=i;j<n;j++){if(i!=j)dp[i][j][0]=dp[i][j][1]=-1;else dp[i][j][0]=dp[i][j][1]=0;}if(min(dfs(0,n-1,0),dfs(0,n-1,1))<1000000000)return 1;else return 0;}int main(){cin>>n;for(int i=0;i<n;i++)cin>>a[i];ll l=0,r=10000000000;for(int iii=0;iii<40;iii++){ll m=(l+r)/2;if(f(m))r=m;else l=m;}cout<<r<<endl;}