D的实现细节有什么问题?
我D题的dp[i][j]定义的是当前玩家在区间 [i,j] 内的得分减去对手在剩余区间内的得分
然后转移起来这么些不清楚哪里有bug
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[1010];
int dp[1010][1010];
signed main()
{
int n;
cin>>n;
int i;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
dp[i][i]=a[i];
}
int len;
for(len=2;len<=n;len++)
{
for(i=1;i<=n-len+1;i++)
{
int j=i+len-1;
int ok=(len%2==1);
if(ok==0)//hou手
{
dp[i][j]=max(a[i]-dp[i+1][j],a[j]-dp[i][j-1]);
}
else
{
if(a[i]>=a[j])
dp[i][j]=a[i]-dp[i+1][j];
else
dp[i][j]=a[j]-dp[i][j-1];
}
}
}
int d=dp[1][n];
cout<<d<<endl;
int sum=0;
for(i=1;i<=n;i++)
sum+=a[i];
cout<<(d+sum)/2<<" "<<sum-(d+sum)/2;
return 0;
}

查看10道真题和解析