이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int long long
#define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define file(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout)
const int N=1e5+1;
const int inf=1e18;
const int mod=1e9+7;
using namespace std;
int n;
struct edge{
int ans,mx,mn,sum;
};
vector<edge>v1;
vector<pair<int,int> >v;
edge dp[5001][5001];
signed main(){
boost;
int n;
cin>>n;
v.push_back({0,0});
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
v.push_back({x,y});
}
int ans=0;
int mx=0;
int mn=0;
int sum=0;
for(int i=1;i<=n;i++){
if(ans<v[i].second){
ans=v[i].second;
mx=v[i].first;
mn=v[i].first;
sum=v[i].second;
}
dp[1][i].ans=ans;
dp[1][i].mx=mx;
dp[1][i].mn=mn;
dp[1][i].sum=sum;
}
for(int i=2;i<=n;i++){
int ans1=0;
int mx1=0;
int mn1=0;
int sum1=0;
for(int j=i;j<=n;j++){
int mx=max(v[j].first,dp[i-1][j-1].mx);
int mn=min(v[j].first,dp[i-1][j-1].mn);
int sum=v[j].second+dp[i-1][j-1].sum;
int ans=sum-(mx-mn);
if(ans>ans1){
ans1=ans;
mx1=mx;
mn1=mn;
sum1=sum;
}
dp[i][j].ans=ans1;
dp[i][j].mx=mx1;
dp[i][j].mn=mn1;
dp[i][j].sum=sum1;
}
}
ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i][n].ans);
}
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |