【链接】h在这里写链接
【题意】
在这里写题意
【题解】
dp[i][0] 第i个位置,bob没有决策权
dp[i][1] 第i个位置,bob有决策权
dp[n][0] = 0;
dp[n][1] = a[n];
for (int i = n-1;i >= 1;i--){
dp[i][1] = max(a[i]+dp[i+1][0],dp[i+1][1]);
if (a[i] + dp[i+1][0]<dp[i+1][1])
dp[i][0] = a[i] + dp[i+1][0];
else
dp[i][0] = dp[i+1][1];
}
dp[i][1] 第i个位置,bob有决策权
dp[n][0] = 0;
dp[n][1] = a[n];
for (int i = n-1;i >= 1;i--){
dp[i][1] = max(a[i]+dp[i+1][0],dp[i+1][1]);
if (a[i] + dp[i+1][0]<dp[i+1][1])
dp[i][0] = a[i] + dp[i+1][0];
else
dp[i][0] = dp[i+1][1];
}
【错的次数】
0
【反思】
在这了写反思
【代码】
#include <bits/stdc++.h> using namespace std; const int N = 50; int n,a[N+10],dp[N+10][2],sum; int main(){ //freopen("F:\\rush.txt","r",stdin); ios::sync_with_stdio(0),cin.tie(0); cin >> n; for (int i = 1;i <= n;i++){ cin >> a[i]; sum += a[i]; } dp[n][0] = 0; dp[n][1] = a[n]; for (int i = n-1;i >= 1;i--){ dp[i][1] = max(a[i]+dp[i+1][0],dp[i+1][1]); if (a[i] + dp[i+1][0] < dp[i+1][1]) dp[i][0] = a[i] + dp[i+1][0]; else dp[i][0] = dp[i+1][1]; } cout << sum - dp[1][1] << ' ' << dp[1][1] << endl; return 0; }