CF859C Pie Rules 動態規劃 逆推_思維題
阿新 • • 發佈:2018-12-14
題意:有 個物品,每個物品有不同的價值,物品按順序分給兩個人,有一塊令牌,每回合擁有令牌的人擁有物品的分配權,但是該回合未獲得物品的那個人會在下回合獲得令牌,開始令牌在Bob手裡,兩個人都採取最優的策略,問最後各能獲得的最大價值是多少。
我們設狀態 為輪到第 個物品時擁有令牌所能獲得的最大值。 如果正著進行求解會有些困難,我們不妨考慮逆著求解: 1.取當前的價值,那說明在上一回閤中是不能有令牌的,即 2.不取當前的價值,那說明在上一回閤中是有令牌的,即 (注意雙方都是最優策略)
Code:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int sum[55], dp[55], val[55], n;
int main()
{
cin >> n;
for(int i = 1;i <= n; ++i) cin >> val[i];
for(int i = n;i >= 1; --i)
{
sum[i] = sum[i + 1] + val[i];
dp[i] = max(dp[i + 1], sum[i + 1] - dp[i + 1] + val[i]);
}
cout << sum[1] - dp[1] << " " << dp[1] ;
return 0;
}