ABC-270 D - Stones(dp)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABC-270 D - Stones(dp)相关的知识,希望对你有一定的参考价值。
ABC-270 D - Stones(dp)
直接贪不行。
反例如下:
10 3
1 3 4
贪最大为4+1=5,而先选3可以3+3=6.
因为答案不具有后效性,因此可以考虑dp。
令 d p ( n ) dp(n) dp(n)表示当前剩余 n n n个石子先手的最大答案。
那么 d p ( n ) = max a i + ( n − a i ) − d p ( n − a i ) = max n − d p ( n − a i ) ∣ n ≥ a i dp(n)=\\max\\a_i+(n-a_i)-dp(n-a_i)\\=\\max\\n-dp(n-a_i)\\|n\\ge a_i dp(n)=maxai+(n−ai)−dp(n−ai)=maxn−dp(n−ai)∣n≥ai
显然可以枚举 a i a_i ai,那么先手的答案就是 a i a_i ai,加上 ( n − a i ) (n-a_i) (n−ai)时的后手,也就是 d p ( n ) dp(n) dp(n)的先手。
时间复杂度: O ( n k ) O(nk) O(nk)
#include<iostream>
using namespace std;
int N,K;
int A[100];
int dp[10001];
main()
cin>>N>>K;
for(int i=0;i<K;i++)cin>>A[i];
for(int i=1;i<=N;i++)
for(int j=0;j<K;j++)if(i>=A[j])dp[i]=max(dp[i],A[j]+(i-A[j])-dp[i-A[j]]);
cout<<dp[N]<<endl;
以上是关于ABC-270 D - Stones(dp)的主要内容,如果未能解决你的问题,请参考以下文章
Pangu and Stones(HihoCoder-1636)(17北京OL)区间DP
UVa 12525 Boxes and Stones (dp 博弈)
Problem 1538 - B - Stones II 贪心+DP
hihoCoder 1636 Pangu and Stones