USACO3.35A Game(记忆化)

时间:2021-11-13 02:52:02

刚开始理解有点误,想成每步都是最优的 ,结果卡在第六组数据上,,

无奈瞧了下别人的 发现自己理解错了,,我看的还是中文翻译。。

简单的记忆化

 /*
ID: shangca2
LANG: C++
TASK: game1
*/
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
#include<cstring>
using namespace std;
int a[],dp[][],s[];
int find(int i,int j)
{ if(i==j)
{
//if(i==2)
// cout<<a[i]<<endl;
return a[i];
}
if(dp[i][j])
return dp[i][j];
dp[i][j] = max(a[i]+s[j]-s[i]-find(i+,j),a[j]+s[j-]-s[i-]-find(i,j-));
return dp[i][j];
}
int main()
{
freopen("game1.in","r",stdin);
freopen("game1.out","w",stdout);
int i,n,sum=;
cin>>n;
for(i = ; i <= n ;i++)
{
cin>>a[i];
s[i] = s[i-]+a[i];
sum+=a[i];
}
int ss = find(,n);
cout<<ss<<" "<<sum-ss<<endl;
return ;
}