当前位置: 代码迷 >> 综合 >> 【DP】BZOJ2091 [Poi2010]The Minima Game
  详细解决方案

【DP】BZOJ2091 [Poi2010]The Minima Game

热度:83   发布时间:2023-09-27 04:39:42.0

分析:

既然有极大极小搜索,那也可以有极大极小DP。。。

很显然的性质:每次拿的人必然拿的是最大的那堆数。

然后就可以DP了

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define SF scanf
#define PF printf
#define MAXN 1000010
using namespace std;
int a[MAXN],dp[MAXN][2];
int n;
int main(){
    SF("%d",&n);for(int i=1;i<=n;i++)SF("%d",&a[i]);int minv=0,maxv=0;sort(a+1,a+1+n);n=unique(a+1,a+1+n)-a-1;for(int i=1;i<=n;i++){
    minv=min(minv,dp[i-1][1]-a[i]);maxv=max(maxv,dp[i-1][0]+a[i]);dp[i][0]=minv;dp[i][1]=maxv;}PF("%d\n",dp[n][1]);
}
  相关解决方案