Pie Rules
思路
起始决定权是在Bob身上,而我们正向不好推导最优情况,如果逆向推导
最后决定权在于Bob,也就是dp1,过程中不需要考虑是谁拿的,而是考虑拿与不拿。
如果不拿,则是dp[i+1],如果拿,则是sum[i+1]-dp[i+1]+arr[i]。
AC代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<string>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
inline int read(){
int s=0,w=1;
char ch=getchar();
for(;ch>'9' || ch<'0';ch=getchar()){
if(ch=='-') w=-1;
}
for(;ch<='9' && ch>='0';ch=getchar()){
s=(s<<3)+(s<<1)+(ch^'0');
}
return s*w;
}
const int N=50+5;
int arr[N],sum[N],dp[N];
int main(){
int n;
n=read();
for(int i=1;i<=n;i++) arr[i]=read();
for(int i=n;i>=1;i--){
sum[i]=sum[i+1]+arr[i];//后缀和
dp[i]=max(dp[i+1],sum[i+1]-dp[i+1]+arr[i]);//不拿与拿
}
printf("%d %d",sum[1]-dp[1],dp[1]);
return 0;
}