AT3631 Capture 题解

题面

思路

本题类似 P1115 最大子段和,优先考虑 DP 做法。

可得两种情况:

  1. 如果一个数加上上一个有效序列得到的结果比这个数大,那么该数也属于这个有效序列。
  2. 如果一个数加上上一个有效序列得到的结果比这个数小,那么这个数单独成为一个新的有效序列。
    by Arahc

\(dp_i\) 表示以第 \(i\) 个动物结尾的最大价值。

可得状态转移方程:

\(dp_i=\max(s_i,dp_{i-1}+s_i-(x_i-x_{i-1}))\)

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
	int w,v;
}a[1000401];
bool cmp(node x,node y)
{
	return x.w<y.w;	
}
int dp[100001];
signed main()
{	
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].w>>a[i].v;	
	}
	sort(a+1,a+n+1,cmp);
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		dp[i]=max(a[i].v,dp[i-1]+a[i].v-(a[i].w-a[i-1].w));	
		ans=max(ans,dp[i]);
	}
	cout<<ans<<'\n';
	return 0;
}

posted @ 2022-02-16 17:27  ㅤSmartBig  阅读(106)  评论(0)    收藏  举报